python exec命令无法使用自定义范围拾取全局变量?

时间:2018-10-19 23:46:32

标签: python global-variables exec

考虑以下代码:

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, {}, {}))检测全局(在要执行的代码内)?

1 个答案:

答案 0 :(得分:0)

s显然不在函数x()的范围内。除非可以从函数内部访问它,否则无法打印它。第二个方法是通过声明要考虑的全局变量来实现。

如果您坚持使用exec(code, {}, {}),则可以将s声明为全局变量:

def x():
    global s
    print(s)

现在两个通话都可以正常工作