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
區塊則負責在程式結束時進行一些清理工作。