完全掌握 Python 的例外處理|try-except 語法使用方法與最佳實踐

1. Python中的例外處理概述

什麼是Python的例外處理?

在程式執行過程中,有時會發生意外的錯誤,這稱為「例外」。當例外發生時,程式通常會停止執行。在Python中,提供了例外處理的機制。透過例外處理,即使程式遇到錯誤,也能夠適當應對並繼續執行。

為什麼例外處理很重要?

例外處理對於讓程式即使遇到錯誤仍能保持易用性非常重要。此外,它還能幫助識別錯誤原因,讓除錯變得更容易,從而開發出更可靠的程式。

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

2. try-except語句是什麼?

基本語法

Python的try-except語句會將可能發生錯誤的程式碼寫在try區塊內,並將錯誤發生時的處理寫在except區塊內。以下是基本語法:

try:
    # 可能會發生錯誤的程式碼
except SomeError:
    # 處理錯誤的程式碼

try區塊內的程式碼正常執行時,except區塊會被忽略;但若發生錯誤,則會執行指定的例外處理。

常見範例:除以零錯誤

當嘗試用零進行除法運算時,會發生ZeroDivisionError。可以使用以下方式來處理該錯誤:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能用零進行除法計算")

 

侍エンジニア塾

3. 常見的例外與處理方法

1. ZeroDivisionError

當嘗試用零進行除法時,會發生此例外。例如,如果將數值除以0,Python會自動拋出ZeroDivisionError

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能用零進行除法計算")

2. ValueError

ValueError會在傳遞不適當的值給函數或操作時發生。以下範例試圖將無法轉換為數字的字串使用int()轉換:

try:
    num = int("not_a_number")
except ValueError:
    print("無效的值")

3. 處理多個例外的方法

若要同時處理多個例外,可以在except語句中列出多個例外類型:

try:
    result = 10 / "string"
except (ZeroDivisionError, TypeError):
    print("發生錯誤")
侍エンジニア塾

4. 使用例外物件獲取錯誤詳情

使用as獲取例外物件

透過except語句中的as關鍵字,可以獲取例外物件。這樣可以參考錯誤的詳細資訊或將其記錄到日誌中。

try:
    a = 10 / 0
except ZeroDivisionError as e:
    print(f"發生錯誤: {e}")

在此程式中,當發生ZeroDivisionError時,錯誤訊息會被儲存在變數e中,並顯示詳細內容。

年収訴求

5. finally區塊的用法

finally是什麼?

finally區塊用於編寫無論是否發生例外都必須執行的程式碼。例如,適用於開啟檔案操作或資料庫連線清理等必要步驟。

try:
    file = open("test.txt", "r")
except FileNotFoundError:
    print("找不到檔案")
finally:
    print("結束檔案操作")

資源清理

finally區塊適合用於確保資源在程式執行結束時被釋放。例如,以下程式碼使用finally來確保檔案會被關閉。

try:
    file = open("data.txt", "r")
    # 檔案操作
finally:
    file.close()

這樣可以保證檔案一定會被關閉,即使程式執行中出現錯誤。

年収訴求

6. 使用raise手動拋出例外

raise的用途

使用raise語句,開發者可以在需要時手動拋出例外。這適合用於驗證輸入資料或特定條件不滿足時主動引發錯誤。

def check_value(value):
    if value < 0:
        raise ValueError("不允許負數值")

自定義例外的範例

透過拋出特定條件的錯誤,可以防止無效的輸入並確保程式執行的穩定性。

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

7. Python中例外處理的最佳實踐

1. 避免過度使用例外處理

過度使用例外處理會降低程式的可讀性,並讓除錯變得困難。建議僅在可能發生錯誤的區塊中使用例外處理,避免將其用於常規的程式流程。

2. 使用日誌記錄錯誤

當發生例外時,記錄錯誤訊息對於日後排查問題非常重要。以下是使用logging模組的範例:

import logging

try:
    a = 10 / 0
except ZeroDivisionError as e:
    logging.error(f"發生錯誤: {e}")

3. 避免使用廣泛的except

建議在例外處理時儘量捕獲具體的錯誤類型,而非使用廣泛的except Exception。過於廣泛的例外處理可能會忽略重要的錯誤細節,導致問題難以追蹤。

広告
年収訴求