考虑以下代码:
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, {}, {})
发布于 2018-10-20 08:02:38
S显然不在函数x()的作用域内。除非您可以从函数内部访问它,否则不能打印它,第二个函数允许通过声明要考虑的全局变量来执行此操作。
如果您坚持使用exec(code, {}, {}),您可以将s声明为全局变量:
def x():
global s
print(s)现在这两个调用都可以工作了
https://stackoverflow.com/questions/52901166
复制相似问题