gpt4 book ai didi

python - 为什么全局范围内的消息是 "name is not defined"而不是 "variable referenced before assignment"?

转载 作者:行者123 更新时间:2023-12-01 00:32:43 25 4
gpt4 key购买 nike

One unreachable assignment statement made one "defined but not assigned" name in local scope但这不适用于全局范围:

#!/usr/bin/python3
#global scope
if False:
baz = 4
pass
#Raise "NameError: name 'baz' is not defined"
print(baz)

我希望在全局范围内得到与局部范围中一样的赋值前引用的变量“baz”类似的消息,但实际消息是name 'baz' is not Defined全局范围。

我在 Python 3.7.2+ 中运行。

最佳答案

在函数作用域中,Python 分析所有赋值操作以生成该作用域应具有的变量的完整列表。在字节码编译时已知局部变量查找对应于函数体中对该变量的至少一个实际赋值,因此未绑定(bind)局部变量的异常消息提到了赋值。

在全局或类范围内不会发生此类分析,并且由于 from another import *globals().update(stuff)< 等操作,此类分析不可能是全面的 绑定(bind)编译时未知的变量。 Python 不会尝试跟踪全局作用域“应该”具有哪些变量,也不会尝试区分

print(a)
a = 1

在绑定(bind)之前使用变量,并且

print(b)

根本没有绑定(bind)操作,或者

thing = 1
print(thinh)

其中 thinh 是一个拼写错误。无论是否存在分配,都会使用相同的错误消息模板,因此当可能根本没有分配时,模板说“分配之前”没有多大意义。

关于python - 为什么全局范围内的消息是 "name is not defined"而不是 "variable referenced before assignment"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047402/

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