首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python exec命令不使用自定义作用域拾取全局变量?

问python exec命令不使用自定义作用域拾取全局变量?
EN

Stack Overflow用户
提问于 2018-10-20 07:46:32
回答 1查看 153关注 0票数 0

考虑以下代码:

代码语言:javascript
复制
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, {}, {})

EN

回答 1

Stack Overflow用户

发布于 2018-10-20 08:02:38

S显然不在函数x()的作用域内。除非您可以从函数内部访问它,否则不能打印它,第二个函数允许通过声明要考虑的全局变量来执行此操作。

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

代码语言:javascript
复制
def x():
    global s
    print(s)

现在这两个调用都可以工作了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52901166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档