如何在 Python 中處理異常(Try-Except-Finally)

了解如何在 Python 中使用 try、 except、 else 和 finally 區塊處理異常。編寫無錯誤且抗崩潰的 Python 程式碼。

在編輯器中嘗試此解決方案

概述

強大的軟體必須準備好處理意外情況,例如檔案遺失、使用者輸入無效、資料庫故障或網路中斷。當 Python 中發生錯誤時,它會引發異常。如果不處理,異常會立即停止您的程式並列印回溯堆疊。

Python 管理執行時期錯誤的主要工具是「try- except」區塊。您可以將可能引發錯誤的程式碼放置在「try」區塊內,並在一個或多個「 except」區塊內定義錯誤處理程式碼。強烈建議指定確切的異常類別(如“ValueError”或“ZeroDivisionError”),因為捕獲所有通用異常(“ except:”)可以掩蓋錯誤。

為了讓異常流更具表現力,Python 提供了兩個附加區塊:「else」和「finally」。只有當「try」區塊中沒有引發異常時,「else」區塊才會執行,這對於只應在成功時運行的程式碼很有用。無論是否發生異常,「finally」區塊*總是*執行,這使其成為關閉檔案或資料庫連線等清理的完美場所。

程式碼和執行輸出

這個腳本使用 try、 except、 else 和 finally 演示了 Python 中強大的錯誤處理。

handle_errors.py
在編輯器中嘗試
def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
端子輸出
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

逐步實施

  • 將可能失敗的程式碼放在 try 區塊中。
  • 使用 except ExceptionType: 區塊捕獲特定錯誤類型以優雅地處理故障。
  • 對於必須僅在成功的 try 區塊上執行的程式碼,請使用 else。
  • 利用finally 保證清理作業無論出現錯誤都會運作。

常見問題解答

我可以在單一 except 區塊中捕獲多個異常嗎?

是的,您可以將它們作為元組傳遞: except (ValueError, TypeError) as e:。

我該如何提出自己的例外狀況?

使用 raise 關鍵字,後面接著異常實例:raise ValueError("無效的配置值")。

相關主題

推薦的 Python 資源

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