Я создаю переменную с exec и говорит, что глобальное имя не определено - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть exec (), который создает переменную внутри def, но при попытке ее использовать он говорит, что «глобальное имя x не определено»

Я загружаю два куска кода, первый -оригинал, а второй - тот, который я начал изменять, чтобы заставить его работать.

def a():

    global events

    b = """a = 1\nif a == 1:\n    print("a")"""
    exec("""events = compile(script, "events", "exec")""")

    exec(events)

a()

exec(events)



def a():

    global events

    b = """a = 1\nif a == 1:\n    print("a")"""
    events_1 = compile(script, "events.txt", "exec")
    exec("events = events_1")

    exec(events)

a()

exec(events)

Мне нужно создать переменную, в которой есть код, который я могу выполнять вне определения.

1 Ответ

0 голосов
/ 10 ноября 2019

Я думаю, что то, что вы делаете, похоже на это, что приводит к ошибке, которую вы видите:

def x():
    global test1
    def y():
        test1 = 123
    y()
x()
print(test1)

>>> NameError: name 'test1' is not defined

Если вы опустите объявление глобальной переменной вниз в область, где назначена переменная,тогда переменная становится глобальной:

def x():
    def y():
        global test2
        test2 = 123
    y()
x()
print(test2)

>>> 123

Итак, чтобы добавить exec обратно в микс, попробуйте следующее:

def a():

    script = """a = 1\nif a == 1:\n    print("a")"""
    exec("""global events\nevents = compile(script, "events", "exec")""")

    exec(events)

a()

exec(events)

>>> a
>>> a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...