在 Python 中處理 NameError 異常

Muhammad Maisam Abbas 2023年1月30日
  1. Python 中的 NameError 異常
  2. 在 Python 中處理 NameError 異常
在 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 異常。此方法不能解決我們的問題或消除異常。

這種方法的一個優點是我們的程式碼永遠不會停止它的執行。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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

相關文章 - Python Exception