Python異常處理從try-except到自定義異常的全過程
??? Python異常處理完全指南:從try-except到自定義異常
在Python編程中,異常處理是寫出健壯代碼的關(guān)鍵技能。本文將帶你深入了解Python的異常處理機(jī)制,從基礎(chǔ)的try-except到自定義異常,讓你的程序更加穩(wěn)定和可靠。
?? 什么是異常?
異常(Exception)是程序執(zhí)行過程中發(fā)生的錯誤事件,會中斷程序的正常流程。Python使用異常對象來表示各種錯誤情況,如除以零、文件不存在、索引越界等。
?? 基礎(chǔ)語法:try-except
最基本的異常處理結(jié)構(gòu)是try-except語句:
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")?? 捕獲多種異常
可以捕獲多種不同類型的異常:
try:
number = int(input("請輸入一個數(shù)字:"))
result = 100 / number
except ValueError:
print("輸入無效!請輸入數(shù)字。")
except ZeroDivisionError:
print("不能除以零!")?? 獲取異常信息
使用as關(guān)鍵字可以獲取異常對象,查看詳細(xì)信息:
try:
file = open("不存在的文件.txt", "r")
except FileNotFoundError as e:
print(f"錯誤信息:{e}")
print(f"錯誤類型:{type(e).__name__}")? else 和 finally
else塊在沒有異常時執(zhí)行,finally塊無論是否發(fā)生異常都會執(zhí)行:
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("文件未找到")
else:
print(f"文件內(nèi)容:{content}")
finally:
print("清理工作完成")
if 'file' in locals():
file.close()?? 捕獲所有異常
使用Exception可以捕獲大部分異常(但不建議濫用):
try:
# 可能出錯的代碼
risky_operation()
except Exception as e:
print(f"發(fā)生錯誤:{e}")
# 記錄日志或進(jìn)行其他處理?? raise 主動拋出異常
使用raise可以主動拋出異常:
def check_age(age):
if age < 0:
raise ValueError("年齡不能為負(fù)數(shù)")
if age > 150:
raise ValueError("年齡不現(xiàn)實")
return age
try:
check_age(-5)
except ValueError as e:
print(f"驗證失?。簕e}")?? 自定義異常
通過繼承Exception類創(chuàng)建自定義異常:
class ValidationError(Exception):
"""數(shù)據(jù)驗證錯誤"""
pass
class InsufficientFundsError(Exception):
"""余額不足錯誤"""
def __init__(self, balance, amount):
self.balance = balance
self.amount = amount
super().__init__(f"余額 {balance} 不足,需要 {amount}")
# 使用自定義異常
class BankAccount:
def __init__(self, balance=0):
self.balance = balance
def withdraw(self, amount):
if amount > self.balance:
raise InsufficientFundsError(self.balance, amount)
self.balance -= amount
return self.balance
# 測試
account = BankAccount(100)
try:
account.withdraw(200)
except InsufficientFundsError as e:
print(f"取款失?。簕e}")
print(f"當(dāng)前余額:{e.balance}")
print(f"請求金額:{e.amount}")?? 異常鏈
使用raise from可以在轉(zhuǎn)換異常時保留原始異常信息:
def parse_config(data):
try:
return json.loads(data)
except json.JSONDecodeError as e:
raise ConfigError("配置文件格式錯誤") from e
# 這樣可以看到完整的異常鏈?? 最佳實踐
- 精確捕獲:盡量捕獲具體的異常類型,而不是泛泛的Exception
- 不要靜默處理:空的except塊會隱藏問題,至少要記錄日志
- 使用finally釋放資源:或使用上下文管理器(with語句)
- 異常信息要清晰:自定義異常時提供有用的錯誤信息
- 不要濫用異常:異常是用于錯誤處理,不是流程控制
?? 上下文管理器與異常
with語句自動處理資源釋放,即使在異常情況下:
# 不需要手動關(guān)閉文件,with會自動處理
with open("data.txt", "r") as file:
content = file.read()
# 即使這里發(fā)生異常,文件也會被正確關(guān)閉?? 總結(jié)
Python的異常處理機(jī)制提供了強(qiáng)大而靈活的錯誤處理能力:
try-except:捕獲和處理異常else:無異常時執(zhí)行的代碼finally:無論是否異常都執(zhí)行的清理代碼raise:主動拋出異常- 自定義異常:創(chuàng)建特定領(lǐng)域的錯誤類型
掌握異常處理,讓你的Python程序更加健壯和專業(yè)!??
到此這篇關(guān)于Python異常處理從try-except到自定義異常的全過程的文章就介紹到這了,更多相關(guān)Python try-except到自定義異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux安裝python修改默認(rèn)python版本方法
在本文中我們給大家總結(jié)了關(guān)于linux安裝python修改默認(rèn)python版本的方法和相關(guān)知識點,需要的讀者們參考下。2019-03-03
Python Django框架實現(xiàn)應(yīng)用添加logging日志操作示例
這篇文章主要介紹了Python Django框架實現(xiàn)應(yīng)用添加logging日志操作,結(jié)合實例形式分析了Django框架中添加Python內(nèi)建日志模塊相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
Python+Selenium+Pytesseract實現(xiàn)圖片驗證碼識別
這篇文章主要介紹了利用Python+Selenium+Pytesseract實現(xiàn)圖片驗證碼識別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-01-01
安裝pyhttpx解決ImportError: DLL load failed錯誤
這篇文章主要為大家介紹了安裝pyhttpx解決ImportError: DLL load failed錯誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

