第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
捕捉並處理異常,避免程式崩潰。- 捕捉多種異常:掌握如何處理多個可能的異常。
else
和finally
:瞭解在成功執行和異常後的處理方式。- 自訂異常:學會如何使用
raise
引發自訂異常。
任務
- 撰寫程式,試圖將字串轉換為整數,並處理
ValueError
異常。 - 撰寫程式,試圖開啟一個不存在的檔案,並處理
FileNotFoundError
異常,使用finally
確保程式結尾的訊息會被印出。 - 撰寫一個自訂函數檢查輸入的數字是否為正數,若為負數則引發自訂的
ValueError
異常並捕捉該異常。
本文章以 CC BY 4.0 授權