gpt4 book ai didi

python - 在函数内调用 exec - NameError

转载 作者:行者123 更新时间:2023-12-05 02:27:57 25 4
gpt4 key购买 nike

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

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

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

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

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

但不太确定为什么。

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

最佳答案

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

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

Note: The default locals act as described for function locals() below: modifications to the default locals dictionary should not be attempted. Pass an explicit locals dictionary if you need to see effects of the code on locals after function exec() returns.

关于python - 在函数内调用 exec - NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72805761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com