Python - 自定義異常



什麼是 Python 中的自定義異常?

Python 的自定義異常是使用者定義的錯誤類,擴充套件了基本 Exception 類。開發人員可以定義和處理特定於其應用程式的特定錯誤條件。開發人員可以透過建立自定義異常來改進程式碼。這允許更具意義的錯誤訊息,並透過指示發生了哪種錯誤以及錯誤的來源來促進除錯過程。

為了定義一個唯一的異常,我們通常必須建立一個新類,其名稱來自 Python 的內建 Exception 類或其子類之一。可以使用相應的 except 程式碼塊來引發此自定義類並捕獲它。

開發人員可以在發生特定錯誤時控制程式的流程並採取適當的操作,例如記錄錯誤、重試操作或優雅地關閉應用程式。自定義異常可以透過覆蓋__init__方法並將額外資訊儲存為例項屬性來攜帶有關錯誤的額外上下文或資料。

使用自定義異常可以提高複雜程式中錯誤處理的清晰度。它有助於區分可能需要不同處理策略的不同型別的錯誤。例如,當檔案解析庫可能定義諸如 FileFormatError、MissingFieldError 或 InvalidFieldError 等異常來處理檔案處理過程中可能出現的各種問題時。這種粒度級別允許客戶端程式碼更有效地捕獲和解決特定問題,從而提高軟體的健壯性和使用者體驗。Python 的自定義異常是處理錯誤和編寫更具表現力的程式碼的絕佳工具。

為什麼要使用自定義異常?

Python 中的自定義異常提供了幾個優勢,這些優勢增強了我們程式碼的功能、可讀性和可維護性。以下是使用自定義異常的主要原因:

  • 特異性:自定義異常允許我們表示特定於我們應用程式的特定錯誤條件。
  • 清晰度:它們使程式碼更易於理解,因為它們清楚地描述了錯誤的性質。
  • 粒度:自定義異常允許更精確的錯誤處理。
  • 一致性:它們有助於在整個程式碼庫中維護一致的錯誤處理策略。

建立自定義異常

在 Python 中建立自定義異常涉及定義新的異常類,這些類擴充套件自 Python 的內建 Exception 類或其任何子類。這允許開發人員建立針對其應用程式中特定場景的專門錯誤型別。以下是如何有效地建立和使用自定義異常:

定義自定義異常類

我們可以透過定義一個繼承自Exception或另一個異常類(如RuntimeErrorValueError等)的新類來開始建立自定義異常,具體取決於錯誤的性質。

以下是定義自定義異常類的示例。在此示例中,CustomError 是一個繼承自 Exception 的自定義異常類。__init__ 方法使用可選的錯誤訊息初始化異常 -

class CustomError(Exception):
   def __init__(self, message):
      super().__init__(message)
      self.message = message

引發自定義異常

要引發自定義異常,我們可以使用 raise 語句,後跟自定義異常類的一個例項。可以選擇傳遞一條訊息來提供有關錯誤的上下文。

在此函式process_data()中,當資料引數為空時,會引發 CustomError 異常,以指示特定的錯誤條件。

def process_data(data):
   if not data:
      raise CustomError("Empty data provided")
   # Processing logic here

處理自定義異常

要處理自定義異常,我們必須使用try-except 塊。在 except 塊中捕獲自定義異常類,並根據需要處理錯誤。

在下面的程式碼中,如果process_data([])引發了 CustomError,則 except 塊會捕獲它,我們可以列印錯誤訊息 (e.message) 或執行其他錯誤處理任務。

try:
   process_data([])
except CustomError as e:
   print(f"Custom Error occurred: {e.message}")
   # Additional error handling logic

自定義異常示例

以下是 Python 中自定義異常處理的基本示例。在此示例中,我們透過對內建的 Exception 類進行子類化來定義一個自定義異常,並使用 try-except 塊來處理自定義異常 -

# Define a custom exception
class CustomError(Exception):
   def __init__(self, message):
      self.message = message
      super().__init__(self.message)

# Function that raises the custom exception
def check_value(value):
   if value < 0:
      raise CustomError("Value cannot be negative!")
   else:
      return f"Value is {value}"

# Using the function with exception handling
try:
   result = check_value(-5)
   print(result)
except CustomError as e:
   print(f"Caught an exception: {e.message}")

輸出

執行以上程式碼後,我們將獲得以下輸出 -

Caught an exception: Value cannot be negative!
廣告