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, если не требуется вне функции.

Извините, если это сбивает с толку. Я англичанин.

→ Ссылка