Exec внутри функции и генератораPython

Программы на Python
Anonymous
Exec внутри функции и генератора

Сообщение Anonymous »

Мне нужно написать специальную функцию exec на Python (для нескольких целей, но здесь проблема не в этом, поэтому эта пользовательская функция exec, которая называется myExec, на данный момент будет работать точно так же, как exec).
Я столкнулся с этой проблемой:

Код: Выделить всё

def myExec(code):
exec(code)

code = """
a = 1
print(a)
u = [a for x in range(3)]
print(u)
"""

myExec(code)
Запуск этой программы дает

Код: Выделить всё

1
Traceback (most recent call last):
File "___.py", line 12, in 
myExec(code)
File "___.py", line 2, in myExec
exec(code, globals(), locals())
File "", line 4, in 
File "", line 4, in 
NameError: name 'a' is not defined
Итак, print(a) прошел без проблем. Но ошибка возникает в строке u = [a for x in range(3)]. Когда объект-генератор преобразуется в список, имя a кажется неопределенным.
Обратите внимание, что если бы строка была u = [a, a, a] , тогда ошибка не возникает. И если мы не будем использовать exec вместо myExec.
Есть ли причина и как это решить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -generator

Вернуться в «Python»