未定义 NameError 名称
当你尝试使用未初始化的变量,方法或函数时(至少不是之前),会引发此问题。换句话说,当找不到请求的本地或全局名称时会引发它。你可能错过了对象的名字或者忘记了什么。也许它在另一个范围内。我们将介绍具有单独示例的内容。
它根本没有在代码中定义
你可能忘记初始化它,特别是如果它是常量
foo # This variable is not defined
bar() # This function is not defined
也许它稍后定义:
baz()
def baz():
pass
或者它不是 import
ed:
#needs import math
def sqrt():
x = float(input("Value: "))
return math.sqrt(x)
Python 范围和 LEGB 规则:
所谓的 LEGB 规则谈论 Python 范围。它的名称基于不同的范围,按相应的优先级排序:
Local → Enclosed → Global → Built-in.
- L ocal:未声明为全局变量或在函数中赋值的变量。
- E nclosing:在包含在另一个函数内的函数中定义的变量。
- G lobal:变量声明为全局变量,或者在文件的顶层指定。
- B uilt-in:在内置名称模块中预先分配的变量。
举个例子:
for i in range(4):
d = i * 2
print(d)
d
是可访问的,因为 for
循环没有标记新范围,但如果确实如此,我们就会出现错误,其行为类似于:
def noaccess():
for i in range(4):
d = i * 2
noaccess()
print(d)
Python 说 NameError: name 'd' is not defined