Почему изменения Python 3 для exec нарушили этот код?

Я просмотрел множество потоков' Python exec 'на SO, но не смог найти ни одного, который помог бы мне решить мою проблему. Очень жаль, если об этом спрашивали раньше. Вот моя проблема:

# Python 2.6: prints 'it is working'
# Python 3.1.2: "NameError: global name 'a_func' is not defined"
class Testing(object):
  def __init__(self):
    exec("""def a_func():
      print('it is working')""")
    a_func()

Testing()

# Python 2.6: prints 'it is working'
# Python 3.1.2: prints 'it is working'
class Testing(object):
  def __init__(self):
    def a_func():
      print('it is working')
    a_func()

Testing()

Поскольку стандартное определение функции работает в обеих версиях Python, я предполагаю, что проблема должна заключаться в изменении способа работы exec. Я прочитал документацию по API для 2.6 и 3 для exec , а также прочитал страницу «Что нового в Python 3.0» и не увидел никаких причин, по которым код может сломаться.

11
задан Jedidiah Hurt 3 July 2011 в 06:34
поделиться