繁体   English   中英

在函数内调用 exec - NameError

[英]Call exec inside a function - NameError

为什么这段代码会引发NameError ?:

def func():
    exec("my_var = 42")
    print(my_var)
func()

有很多相关的问题,但我还没有找到关于 WHY 的明确答案。 我不想要解决方法。

另外,我注意到代码在我运行时有效:

exec("my_var = 42", globals(), globals())

但不确定为什么。

exec()文档指出:“...如果省略了可选部分 [第二个和第三个参数],则代码将在当前范围内执行。”。 当前作用域是func()函数。 为什么我不能从同一范围访问my_var

解析器/编译器不考虑exec()的参数(因为它可能是一个变量)。 因此,当它解析函数时,它看不到对my_var的赋值,因此将其视为全局变量。 但是exec()中的赋值会创建一个局部变量。 因此,分配的变量与它尝试打印的变量不同。

此外,如果您希望对局部变量的更改可见,则必须显式传递locals()字典。 [文档] 指出:

注意:默认locals的行为如下面函数locals()所述:不应尝试修改默认locals字典。 如果您需要在函数exec()返回后查看代码对局部变量的影响,请传递显式局部变量字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM