【Python 例外處理入門】從基礎到最佳實踐的詳細解析

1. 什麼是 Python 的例外?

Python 的例外是一種在程式執行過程中發生的錯誤。通常,程式會從上到下依序執行程式碼,但在特定情況下發生錯誤時,該部分的程式碼會中斷執行,並引發例外。例如,嘗試除以零會產生ZeroDivisionError,而訪問不存在的列表索引則會產生IndexError

1.1 常見的例外類型

Python 提供許多內建的例外。以下是一些常見的例子:

  • ValueError: 當函數接收到不適合的值時
  • TypeError: 當操作或函數對錯誤的資料型別執行時
  • IndexError: 當嘗試訪問超出序列範圍(如列表)的索引時
  • ZeroDivisionError: 當嘗試用零進行除法時

這些例外提供有用的診斷資訊,幫助識別程式執行過程中發生的錯誤。

2. 使用tryexcept進行基本的例外處理

在 Python 中,可以使用tryexcept進行例外處理。這樣可以防止程式因錯誤而停止,並確保在發生錯誤時,程式的其他部分仍可繼續執行。

2.1 基本語法

將可能發生錯誤的程式碼放入try區塊內,然後在except區塊內編寫處理該錯誤的程式碼。

try: result = 10 / 0 except ZeroDivisionError: print("無法除以零。")

在此例中,當發生ZeroDivisionError時,會執行except區塊,並輸出「無法除以零。」

2.2 多個except區塊

如果需要處理多種類型的例外,可以使用多個except區塊。例如,可以針對NameErrorTypeError進行不同的處理。

try: print(a) except NameError: print('變數 a 尚未定義。') except TypeError: print('使用了不正確的資料型別。')

在此程式碼中,因為變數a未定義,會產生NameError並顯示相應訊息。

3. 如何處理多個例外

如果程式可能會發生多種類型的例外,可以將它們在同一個except區塊內進行處理。

3.1 使用單個except區塊處理多個例外

可以將多個例外類型作為元組傳遞到except區塊中進行處理,如以下範例所示:

try: num = int(input("請輸入數字: ")) result = 10 / num except (ValueError, ZeroDivisionError): print("輸入無效或嘗試除以零。")

在此例中,如果使用者輸入無效的數值或嘗試用零除法,都會顯示「輸入無效或嘗試除以零。」

3.2 使用父類別處理多個例外

Exception類別是大多數內建例外的父類別。如果想捕獲所有例外,可以使用該類別。然而,由於此方法範圍廣泛,因此需謹慎使用。

try: # 可能會發生錯誤的程式碼 except Exception as e: print("發生錯誤:", e)

此方法可以捕獲所有例外並顯示訊息。然而,建議優先處理特定例外,以提高程式的可維護性。

4. 觸發例外 (raise)

在程式執行過程中,如果某些條件不符合,可以手動觸發例外。這可以透過raise語句實現。

4.1 raise語句的用法

以下範例顯示當傳入負值時觸發ValueError

def check_value(value): if value < 0: raise ValueError("不允許負值。") return value try: result = check_value(-1) except ValueError as e: print(e)

此範例中,因為傳入負值-1,會觸發ValueError,並顯示「不允許負值。」

4.2 raise的應用

raise語句也可用於自訂例外類別。在特定條件下觸發這些例外,可以讓錯誤處理更具靈活性。

5. 獲取例外資訊

發生例外時,可以獲取詳細的錯誤資訊,以協助診斷問題或進行除錯。可以透過as語句取得例外物件。

5.1 使用as語句

以下範例展示如何取得例外物件並顯示其訊息:

try: result = 10 / 0 except ZeroDivisionError as e: print("發生錯誤:", e)

此範例會顯示「發生錯誤: division by zero」,提供錯誤的詳細資訊。

6. 例外處理的最佳實踐

有效的例外處理可以提高程式的穩定性和可靠性。以下是一些 Python 例外處理的最佳實踐:

  • 僅捕獲特定例外,避免過於廣泛的例外處理。
  • 將錯誤訊息記錄到日誌中,以便後續分析。
  • 設計優雅降級機制,確保程式不會完全崩潰。
  • 使用finally區塊來釋放資源或執行必要操作。

7. 總結

Python 的例外處理是一項關鍵技術,可以提高程式的可靠性,並在錯誤發生時提供適當的應對措施。