考虑下面的脚本,它使用
exec
要定义两个函数,其中一个函数调用另一个函数:
def run_code():
code = """
def foo():
print('foo')
return 1
def bar():
print('bar calls foo')
return 1 + foo()
result = bar()
"""
exec(code, globals(), locals())
print('Result: {}'.format(locals()['result']))
run_code()
我希望看到以下输出:
bar calls foo
foo
Result: 2
bar calls foo
Traceback (most recent call last):
File "minimal.py", line 17, in <module>
run_code()
File "minimal.py", line 14, in run_code
exec(code, globals(), locals())
File "<string>", line 10, in <module>
File "<string>", line 8, in bar
NameError: name 'foo' is not defined
有趣的是,如果
run_code
globals()
或
locals()
有了一本新的空字典,它又破了。我也知道
def foo
bar
他的身体会让它工作的。
执行官