exec() не работает внутри def
Столкнулся со следующей проблемой - внутри def не работает должным образом exec()
Вот рабочий кусок кода:
foo = 'Hello World!'
exec('bar = %s' % 'foo')
print(bar)
# Hello World!
А вот нерабочий:
def func():
foo = 'Hello World!'
exec('bar = %s' % 'foo')
print(bar)
func()
# name 'bar' is not defined
Подскажите, что я делаю не так?
Ответы (1 шт):
Автор решения: David
→ Ссылка
Попробуйте:
def func():
foo = 'Hello World!'
exec('bar = %s' % 'foo',locals(),globals())
print(bar)
func()
Передавайте locals() как параметр globals и globals() как параметр locals.
exec () устанавливает bar как глобальный, но читаетfoo как глобальный.
foo является локальным, поэтому locals() нужно передавать для globals.
Точно так же, bar используется как локальный, поэтому передайте locals () как globals, если не требуется вне функции.
Извините, если это сбивает с толку. Я англичанин.