Python 嘗試/例外與錯誤處理

防止 Python 腳本崩潰。了解 try、 except、finally 區塊以及如何正確引發自訂異常。

在編輯器中嘗試

概述

在現實的程式設計世界中,錯誤是完全不可避免的。檔案可能會被刪除,網路連線可能會斷開,或者使用者可能在腳本需要輸入數字時輸入字母。如果在沒有保護措施的情況下發生這些情況,Python 將停止執行並拋出異常(運行時錯誤),從而使整個程式崩潰。錯誤處理是優雅地預測和管理這些故障的藝術。

Python 中錯誤管理的基礎是「try」和「 except」區塊結構。您將潛在危險的程式碼放置在「try」區塊內。 Python 將嘗試執行它。如果發生錯誤,Python 不會崩潰,而是會攔截異常並立即跳到執行「 except 」區塊中包含的程式碼。這允許程式恢復、顯示友好的錯誤訊息並繼續運行。

捕獲特定的、有針對性的異常而不是編寫一攬子「例外:」區塊是一個關鍵的最佳實踐。例如,明確捕獲“FileNotFoundError”或“ValueError”可確保您正在處理您預期的確切問題,而不是意外掩蓋您真正需要了解的不相關錯誤(例如語法錯誤)。

Python 還提供了一個可選的「else」區塊,只有當「try」區塊完全成功完成且沒有引發任何錯誤時才會執行。這是放置絕對取決於危險操作成功與否的邏輯的完美位置。此外,「finally」區塊提供了一種無論發生什麼情況(無論是否發生錯誤)都可以執行程式碼的方法。 「finally」區塊對於清理作業至關重要,例如關閉資料庫連線或釋放檔案鎖定。

除了捕獲錯誤之外,Python 還允許開發人員使用「raise」關鍵字明確觸發錯誤。引發異常允許您在邏輯中實施嚴格的約束,在無效資料破壞應用程式狀態之前拒絕它。透過定義繼承自 Python 基「Exception」類別的自訂異常類,開發人員可以為大型企業應用程式建立高度特定於網域的錯誤層次結構。

程式碼和執行輸出

在與潛在危險或不存在的文件結構互動時建立結構安全。

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: Cannot divide by zero!"
    except TypeError:
        return "Error: Both arguments must be numbers."
    else:
        return f"The result is {result}"
    finally:
        print("Execution completed.")

print(divide_numbers(10, 2))
print(divide_numbers(10, 0))
端子輸出
Execution completed.
The result is 5.0
Execution completed.
Error: Cannot divide by zero!

逐步實施

  • 驗證使用者表單提交
  • 確保網路請求不會因逾時而崩潰
  • 在finally區塊中安全地關閉資料庫連接

常見問題解答

什麼是「提高」關鍵字?

raise 關鍵字用於有目的地引發異常。您可以定義要引發的錯誤類型以及要列印給使用者的文字。

相關主題

推薦的 Python 資源

透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。