У меня есть сгенерированный сгенерированный фрагмент кода Python, который я хотел бы exec()
из экземпляра класса.Вызов функций в exec() из экземпляра класса
Упрощенный фрагмент кода выглядит следующим образом:
prog = """
def func1():
func2()
def func2():
pass
func1()
"""
class test():
def run(self):
exec(prog)
test().run() # results in NameError: name 'func2' is not defined
exec(prog) # works
Хотя func1()
можно назвать в обоих случаях, func2
не найден, когда exec()
«ИНГ из класса. Если я сначала запустил exec(prog)
, то даже test().run()
преуспеет. Кажется, что предыдущий вызов exec оставил func2
в некотором месте в пространстве имен, где он может быть позже найден при вызове из класса.
Есть ли простой и чистый способ вызвать такой фрагмент кода, содержащий несколько функций из класса?
Интересно. Ваш код работает как написанный на Python 2, но я получаю вашу ошибку на Python 3. Можете ли вы подтвердить, что находитесь на Python 3? –
Ах да. Прочитайте это: http://stackoverflow.com/a/15087355/5014455 –
Да, я использую Python3. –