Python - 試捕區塊

哈囉,未來的 Python 大師們!很高興能引導您們進入 Python 處理錯誤的奇妙世界。作為您親切友善的電腦科學老師,我見過無數學生在錯誤上跌跌撞撞,但不用害怕!在這個教程結束時,您將能像專家一樣處理異常。讓我們一起深入探討吧!

Python - try-except Block

Python 的試捕區塊

想像您正在嘗試一道新的食譜。您不确定是否擁有所有的食材,但您還是想嘗試看看。這正是 Python 的 try-except 區塊所做的——它讓您嘗試執行一些代碼,並在出現潛在錯誤時優雅地處理。

以下是基本的結構:

try:
# 可能會引起異常的代碼
except:
# 處理異常的代碼

讓我們來看看一個簡單的例子:

try:
number = int(input("輸入一個數字: "))
result = 10 / number
print(f"10 除以 {number} 等於 {result}")
except:
print("糟糕!有點問題。")

在這段代碼中:

  1. 我們請求使用者輸入一個數字。
  2. 我們嘗試用 10 除以那個數字。
  3. 如果有任何問題(例如輸入零或非數字),我們就捕獲錯誤並列印一個友好的訊息。

嘗試用不同的輸入運行這段代碼。分別輸入 2,然後 0,然後 "香蕉"。看看它是如何分別處理每種情況的?

處理多個異常

現在,讓我們更進一步。可能會發生不同類型的錯誤,而我們可能希望對它們進行不同的處理。這就像針對不同類型的傷害有不同的急救箱一樣。

try:
number = int(input("輸入一個數字: "))
result = 10 / number
print(f"10 除以 {number} 等於 {result}")
except ValueError:
print("那不是有效的數字!")
except ZeroDivisionError:
print("你不能除以零!")
except:
print("出了點別的問題。")

在這裡,我們處理了三種情況:

  1. 如果使用者輸入了不是數字的東西(ValueError)
  2. 如果使用者輸入了零(ZeroDivisionError)
  3. 任何其他未預期的錯誤

用 "五",0,2 這樣的輸入運行這段代碼,看看它如何以不同的方式做出反應!

在試捕區塊中使用 Else 節

有時,我們希望只有在沒有發生異常的情況下才運行一些代碼。這就是 else 節的用處所在。把它想作是一切順利時的獎勵!

try:
number = int(input("輸入一個正數: "))
if number <= 0:
raise ValueError("那不是正數!")
result = 10 / number
except ValueError as ve:
print(f"錯誤:{ve}")
except ZeroDivisionError:
print("你不能除以零!")
else:
print(f"10 除以 {number} 等於 {result}")
print("感謝您輸入了一個有效的數字!")

在這個例子中:

  1. 我們檢查數字是否為正數。
  2. 如果不是,我們引發自己的 ValueError。
  3. 如果沒有發生異常,else 區塊將運行,給出一個很好的訊息。

Finally 節

最後但同樣重要的是,見見 finally 節。這個代碼區塊不論是否發生異常都將運行。這就像無論食譜是成功還是失敗,都要清理一樣。

try:
file = open("important_data.txt", "r")
content = file.read()
result = 10 / int(content)
except FileNotFoundError:
print("文件不存在!")
except ValueError:
print("文件中不包含有效的數字!")
except ZeroDivisionError:
print("文件中的數字是零!")
else:
print(f"結果是:{result}")
finally:
print("關閉文件...")
file.close()

在這個例子中:

  1. 我們嘗試打開一個文件並從中讀取一個數字。
  2. 我們處理各種潛在的錯誤。
  3. 如果成功,我們列印結果。
  4. 不論發生什麼,我們都確保在 finally 區塊中關閉文件。

異常處理方法摘要

以下是總結我們學過的異常處理方法的便捷表格:

方法 描述 使用情況
try 包圍可能引發異常的代碼 始終與 except、else 或 finally 一起使用
except 處理特定的異常 捕獲和處理錯誤
else 如果 try 區塊中沒有發生異常則運行 執行只有在 try 成功時才應運行的代碼
finally 不論異常如何都會執行 清理操作(例如,關閉文件)
raise 手動引發一個異常 創建自定義錯誤條件

記住,良好的錯誤處理就像系安全帶一樣——在真正需要之前可能會顯得不相關!練習這些概念,您很快就會像專家一樣撰寫出堅固、對錯誤有抵抗力的 Python 代碼。

編程愉快,願您的異常總能被優雅地處理!

Credits: Image by storyset