try-except語句
try-except 語句的作用
try-except 語句是 Python 處理異常的核心結構。它允許程式在運行過程中捕捉並處理異常,而不是在遇到錯誤時直接崩潰。這使得程式能夠更加健壯,並且可以在發生錯誤時做出適當的反應。
語法結構與各區塊的功能
try:
# 可能會引發異常的程式碼
except <異常類型>:
# 當捕捉到特定異常類型時執行的程式碼
else:
# 如果沒有異常發生,則執行這段程式碼(可選)
finally:
# 無論是否發生異常,總會執行這段程式碼(可選)
工作原理
- try 區塊:這個區塊中的程式碼是我們認為可能會引發異常的部分。Python 首先會嘗試執行這部分程式碼。如果一切順利,程式會跳過 except 區塊,進入 else 或 finally 區塊。
- except 區塊:如果 try 區塊中的程式碼引發了異常,程式會立即跳到 except 區塊,並根據異常類型進行匹配。如果匹配成功,except 區塊中的程式碼會被執行。可以有多個 except 區塊來處理不同類型的異常。
- else 區塊:這個區塊在沒有任何異常發生時執行。它通常用於當 try 區塊中的程式碼成功執行後,我們希望執行的後續操作。
- finally 區塊:無論是否發生異常,finally 區塊中的程式碼都會被執行。這通常用於清理資源,例如關閉檔案或釋放網路連接。
範例:處理文件操作的異常
try:
fh = open("testfile", "w")
fh.write("這是一個測試文件,用於測試異常處理!")
except IOError:
print("錯誤:沒有找到文件或讀取文件失敗")
else:
print("內容寫入文件成功")
fh.close()
finally:
print("這段話無論如何都會執行")
在這個範例中:
try區塊嘗試開啟並寫入文件。- 如果文件操作失敗(例如文件無法打開或寫入),
except區塊會捕捉到IOError,並輸出錯誤信息。 - 如果文件成功寫入,
else區塊會顯示成功信息並關閉文件。 - 無論文件操作是否成功,
finally區塊中的信息都會被輸出,這通常用於確保文件資源被正確釋放。
進階應用:捕捉多個異常類型
有時候,程式可能會遇到多種類型的異常。在這種情況下,可以在 except 區塊中同時捕捉多個異常類型,並進行相應的處理。
try:
# 可能會引發多種類型異常的程式碼
except (IOError, ValueError) as e:
print(f"捕捉到異常:{e}")
else:
print("程式執行成功")
finally:
print("程式結束")
在這個進階範例中:
try區塊中可能會引發IOError或ValueError兩種類型的異常。- 如果引發了這兩種異常中的任意一個,except 區塊會捕捉到並輸出異常信息。
- 如果沒有異常發生,else 區塊會顯示程式成功運行的消息。
finally區塊則負責在程式結束時進行一些清理工作。
