未定義 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