文章

第13天:異常處理

課程簡介

程式在執行時可能會發生各種錯誤,這些錯誤稱為異常(Exception)。異常處理是一種有效的方式來應對這些錯誤,避免程式崩潰。今天我們將學習如何使用 try-except 語句來處理異常,以及如何使用 finally 語句來確保無論發生什麼錯誤,某些操作都會執行。


學習內容

1. 什麼是異常?

異常是在程式執行過程中出現的錯誤。當異常發生時,Python 會停止執行程式並引發對應的錯誤。常見的異常包括:

  • ZeroDivisionError: 除以零的錯誤。
  • FileNotFoundError: 檔案找不到的錯誤。
  • ValueError: 資料類型或格式不正確的錯誤。

範例:

1
2
# ZeroDivisionError
x = 10 / 0  # 這會引發除零錯誤

2. 使用 try-except 進行異常處理

當我們預期某段程式碼可能會引發錯誤時,可以使用 try-except 語句來捕捉並處理異常,避免程式崩潰。

範例:

1
2
3
4
try:
    x = 10 / 0
except ZeroDivisionError:
    print("發生了除零錯誤!")

3. 捕捉多種異常

如果同一段程式碼可能會引發多種不同的異常,我們可以在 except 區塊中處理多個異常。

範例:

1
2
3
4
5
6
7
try:
    x = int("abc")  # 這會引發 ValueError
    y = 10 / 0      # 這會引發 ZeroDivisionError
except ValueError:
    print("發生了值錯誤!")
except ZeroDivisionError:
    print("發生了除零錯誤!")

4. 捕捉所有異常

如果不確定會引發哪種異常,可以使用 except Exception 來捕捉所有異常。這樣做可以避免未處理的異常導致程式崩潰,但不推薦用於所有情況,因為不明確的異常處理可能會掩蓋其他問題。

範例:

1
2
3
4
try:
    x = int("abc")
except Exception as e:
    print(f"發生了錯誤:{e}")

5. 使用 else 語句

else 語句會在 try 區塊沒有發生任何異常時執行,通常用來處理成功的情況。

範例:

1
2
3
4
5
6
try:
    x = 10 / 2
except ZeroDivisionError:
    print("發生了除零錯誤!")
else:
    print("計算成功,結果是:", x)

6. 使用 finally 語句

finally 區塊中的程式碼無論是否發生異常都會執行,通常用來釋放資源或執行清理工作。

範例:

1
2
3
4
5
6
7
try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("檔案未找到!")
finally:
    print("無論如何,這段代碼都會執行。")

7. 自訂異常

Python 允許我們自訂異常,這在一些自訂錯誤情況下非常有用。可以使用 raise 關鍵字來引發自訂異常。

範例:

1
2
3
4
5
6
7
8
def check_positive(number):
    if number < 0:
        raise ValueError("數字必須是正數!")

try:
    check_positive(-5)
except ValueError as e:
    print(e)

教學重點

  • 異常的基本概念:瞭解常見的異常類型及其引發條件。
  • try-except 異常處理:學會使用 try-except 捕捉並處理異常,避免程式崩潰。
  • 捕捉多種異常:掌握如何處理多個可能的異常。
  • elsefinally:瞭解在成功執行和異常後的處理方式。
  • 自訂異常:學會如何使用 raise 引發自訂異常。

任務

  1. 撰寫程式,試圖將字串轉換為整數,並處理 ValueError 異常。
  2. 撰寫程式,試圖開啟一個不存在的檔案,並處理 FileNotFoundError 異常,使用 finally 確保程式結尾的訊息會被印出。
  3. 撰寫一個自訂函數檢查輸入的數字是否為正數,若為負數則引發自訂的 ValueError 異常並捕捉該異常。
本文章以 CC BY 4.0 授權