在 Python 中處理 NameError 異常
本教程將討論 NameError
異常是如何發生的以及如何在 Python 中處理它。
Python 中的 NameError
異常
當呼叫的物件未在當前範圍內初始化時,會引發 Python 中的 NameError
異常。它可能已定義,但我們沒有使用正確的名稱來呼叫它。
這個例外有四個不同的原因,下面將詳細討論。
拼寫錯誤的內建函式或關鍵字
在使用內建函式或關鍵字時,我們經常拼寫錯誤,或者 IDE 有時會忘記更正我們。在這種情況下會引發 NameError
異常。要處理此異常,我們必須指定正確的函式名稱或正在使用的關鍵字。
下面的程式碼片段演示了一個內建函式在呼叫時拼寫錯誤的場景,這會引發 NameError
異常。
prnt("Hello World")
輸出:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-bcdc0d5019dd> in <module>()
----> 1 prnt("Hello World")
NameError: name 'prnt' is not defined
我們拼錯了內建的 print()
函式以引發 NameError
異常。修復此異常的唯一方法是查詢 Python 的官方文件以獲取正確的函式定義。
使用了未定義的變數或函式
這是引發 NameError
異常的另一個常見原因。我們傾向於呼叫不存在的函式或變數。
此程式碼片段演示了一個內建函式在呼叫時拼寫錯誤的場景,這會引發 NameError
異常。
print(value)
輸出:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-a458d288e6eb> in <module>()
----> 1 print(value)
NameError: name 'value' is not defined
我們呼叫未定義的 value
屬性來引發 NameError
異常。修復此異常的唯一方法是從程式碼中刪除函式或變數呼叫。
在全域性範圍內呼叫區域性變數或函式
我們有時會在其範圍之外呼叫區域性函式和變數,從而導致 NameError
異常。
以下程式碼演示了在全域性範圍內呼叫區域性變數的場景,這會引發 NameError
異常。
def func():
value = 6500
print(value)
輸出:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-9e4aa38076bc> in <module>()
1 def func():
2 value = 6500
----> 3 print(value)
NameError: name 'value' is not defined
區域性變數 value
位於 func()
函式內,但我們在全域性範圍內呼叫它,這會引發 NameError
異常。我們可以通過了解可以在何處使用每個變數和函式來引用來修復此異常。
宣告前呼叫變數或函式
當我們在宣告之前呼叫變數或函式時,這種型別的錯誤經常發生。Python 是一種解釋型語言,它按順序逐行執行。
以下程式碼演示了宣告前的變數呼叫,引發了 NameError
異常。
print(value)
value = 1500
輸出:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-6-49e5676ec0d7> in <module>()
----> 1 print(value)
2 value = 1500
NameError: name 'value' is not defined
在宣告它之前,我們呼叫了 value
變數來引發 NameError
異常。我們可以通過在初始化之後編寫呼叫語句來修復這個異常。
在 Python 中處理 NameError
異常
如果我們想處理 NameError
異常以便我們的程式碼永遠不會停止執行,我們可以將我們的程式碼包含在 try/except
塊中。我們可以使用 NameError
異常類來處理這種異常型別。
示例程式碼片段演示瞭如何在不使用 Python 的 try/except
塊停止執行的情況下處理 NameError
異常。
try:
print(v)
v = 1500
except NameError:
print("Nameerror exception raised")
輸出:
Nameerror exception raised
我們通過將容易出錯的程式碼包含在 try
塊中並使用 except
塊在輸出中寫入錯誤訊息來處理 NameError
異常。此方法不能解決我們的問題或消除異常。
這種方法的一個優點是我們的程式碼永遠不會停止它的執行。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn