未定義 NameError 名稱

當你嘗試使用未初始化的變數,方法或函式時(至少不是之前),會引發此問題。換句話說,當找不到請求的本地或全域性名稱時會引發它。你可能錯過了物件的名字或者忘記了什麼。也許它在另一個範圍內。我們將介紹具有單獨示例的內容。

它根本沒有在程式碼中定義

你可能忘記初始化它,特別是如果它是常量

foo   # This variable is not defined
bar() # This function is not defined

也許它稍後定義:

baz()

def baz():
    pass

或者它不是 imported:

#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