考虑以下代码:
code = '''
s = "hi"
def x():
print(s)
x()
'''
# does not work
exec(code, {}, {})
# works
exec(code, globals(), locals()) # works
当我们将exec
与自定义全局变量和局部变量一起使用时,会遇到无法识别s
的错误
NameError: name 's' is not defined
当我们通过exec(code, globals(), locals())
使用默认的全局变量和局部变量时,一切都很好。
我如何让exec用自定义范围(即exec(code, {}, {})
)检测全局(在要执行的代码内)?
答案 0 :(得分:0)
s显然不在函数x()的范围内。除非可以从函数内部访问它,否则无法打印它。第二个方法是通过声明要考虑的全局变量来实现。
如果您坚持使用exec(code, {}, {})
,则可以将s声明为全局变量:
def x():
global s
print(s)
现在两个通话都可以正常工作