[英]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.