Python捕獲異常主要通過try-except
語句實現,以下是核心語法和使用場景:
一、基礎捕獲結構
try: # 可能引發異常的代碼 result = 10 / 0
except ZeroDivisionError: # 處理特定異常 print("除數不能為零")
二、捕獲多種異常
try: # 可能引發多種異常的代碼 value = int("abc")
except (ValueError, TypeError) as e: # 處理多個異常類型 print(f"輸入錯誤:{e}")
三、捕獲所有異常
用Exception
捕獲所有非系統退出的異常(不推薦濫用,優先用具體異常類型):
try: risky_operation()
except Exception as e: print(f"發生未知錯誤:{e}")
四、else
和finally
子句
else
:無異常時執行,位于except
之后。try: x = 10 / 2 except ZeroDivisionError: print("除零錯誤") else: print("計算結果:", x) # 輸出:計算結果:5.0
finally
:無論是否異常都會執行,常用于釋放資源(如關閉文件)。try: file = open("data.txt", "r") data = file.read() except FileNotFoundError: print("文件不存在") finally: file.close() # 確保文件被關閉 print("資源已釋放")
五、異常傳遞與自定義異常
異常傳遞:異常會從引發處向上傳遞,可在調用棧中逐層捕獲。
def func1(): raise ValueError("參數錯誤") def func2(): func1() try: func2() except ValueError as e: print(f"捕獲到異常:{e}") # 輸出:捕獲到異常:參數錯誤
自定義異常:繼承
Exception
類創建業務專用異常。class InsufficientBalanceError(Exception): def __init__(self, balance, amount): super().__init__(f"余額不足:當前{balance}元,需{amount}元") try: if balance < amount: raise InsufficientBalanceError(balance, amount) except InsufficientBalanceError as e: print(e) # 輸出:余額不足:當前100元,需150元
六、最佳實踐
精準捕獲:優先用具體異常類型(如
ZeroDivisionError
),避免用裸except:
。資源管理:用
try/finally
或上下文管理器(with
)確保資源釋放。日志記錄:在
except
中記錄異常信息(如logging.error
),便于調試。
?