Python異常處理操作舉例詳細(xì)教程

一、異常處理基礎(chǔ)
1. 基本語(yǔ)法結(jié)構(gòu)
try:
# 可能引發(fā)異常的代碼
result = 10 / 0
except ZeroDivisionError:
# 處理特定異常
print("不能除以零!")
except Exception as e:
# 通用異常處理
print(f"發(fā)生錯(cuò)誤: {e}")
else:
# 無(wú)異常時(shí)執(zhí)行
print("計(jì)算成功")
finally:
# 始終執(zhí)行的清理代碼
print("清理資源")
- 異常傳播機(jī)制

二、常見(jiàn)異常類型
1. 內(nèi)置異常層次
所有異常類都繼承 BaseException
BaseException
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── ZeroDivisionError
│ └── FloatingPointError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── OSError
│ ├── FileNotFoundError
│ └── PermissionError
└── ValueError
2. 常見(jiàn)異常示例
# 文件操作
try:
with open("nonexist.txt") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在")
# 類型轉(zhuǎn)換
try:
num = int("abc")
except ValueError:
print("無(wú)效的數(shù)字格式")
# 字典操作
d = {"key": "value"}
try:
print(d["missing"])
except KeyError:
print("鍵不存在")
三、多重異常處理
1. 合并捕獲
try:
# 可能拋出多種異常的代碼
except (TypeError, ValueError) as e:
print(f"輸入類型錯(cuò)誤: {e}")
2. 分層處理
try:
data = json.loads(invalid_json)
except json.JSONDecodeError:
print("JSON解析失敗")
except Exception:
print("其他未知錯(cuò)誤")
四、finally與else子句
1. finally 應(yīng)用場(chǎng)景
file = None
try:
file = open("data.txt", "r")
process(file)
except IOError:
print("文件操作錯(cuò)誤")
finally:
if file:
file.close() # 確保資源釋放
2. else 使用技巧
try:
result = risky_operation()
except NetworkError:
handle_error()
else:
save_result(result) # 僅在成功時(shí)執(zhí)行
五、自定義異常
1. 創(chuàng)建異常類
class InvalidEmailError(ValueError):
"""自定義郵箱格式異常"""
def __init__(self, email):
super().__init__(f"無(wú)效郵箱格式: {email}")
self.email = email
# 使用示例
email = "user@"
if "@" not in email or "." not in email.split("@")[1]:
raise InvalidEmailError(email)
2. 異常繼承體系
class DatabaseError(Exception):
"""數(shù)據(jù)庫(kù)操作基類異常"""
class ConnectionError(DatabaseError):
"""數(shù)據(jù)庫(kù)連接異常"""
class QueryError(DatabaseError):
"""SQL查詢異常"""
六、異常鏈與上下文
1. raise from 語(yǔ)法
try:
config = load_config()
except FileNotFoundError as e:
raise RuntimeError("配置加載失敗") from e
2. 異常上下文查看
try:
# 可能出錯(cuò)的代碼
except Exception as e:
print("原始異常:", e.__cause__)
print("上下文:", e.__context__)
七、最佳實(shí)踐與陷阱
? 推薦做法
- 具體異常捕獲優(yōu)先
- 添加有意義的錯(cuò)誤信息
raise ValueError(f"無(wú)效參數(shù)值: {value}")
- 日志記錄異常
import logging
try:
process()
except Exception:
logging.exception("處理失敗")
?? 避免陷阱
- 捕獲過(guò)于寬泛的異常
try:
...
except: # 捕獲所有異常,包括KeyboardInterrupt
pass
- 忽略異常
try:
...
except Exception:
pass # 靜默失敗
- 重復(fù)拋出異常
try:
...
except Exception as e:
print(e)
raise # 保留原始堆棧信息
綜合實(shí)戰(zhàn)案例
網(wǎng)絡(luò)請(qǐng)求重試機(jī)制
import requests
from time import sleep
def fetch_data(url, retries=3):
for attempt in range(retries):
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
return response.json()
except requests.HTTPError as e:
print(f"HTTP錯(cuò)誤: {e}")
except requests.Timeout:
print("請(qǐng)求超時(shí)")
except requests.RequestException:
print("網(wǎng)絡(luò)連接問(wèn)題")
if attempt < retries - 1:
sleep(2 ** attempt) # 指數(shù)退避
raise Exception(f"請(qǐng)求失敗,已重試{retries}次")
# 使用示例
data = fetch_data("https://api.example.com/data")
通過(guò)掌握這些異常處理技巧,您可以:
- 編寫更健壯的程序
- 提高錯(cuò)誤診斷效率
- 創(chuàng)建更友好的用戶交互體驗(yàn)
- 構(gòu)建可維護(hù)的異常處理體系
建議在實(shí)際開(kāi)發(fā)中結(jié)合具體業(yè)務(wù)場(chǎng)景,設(shè)計(jì)合理的異常處理策略,并定期審查異常處理代碼的有效性
總結(jié)
到此這篇關(guān)于Python異常處理操作的文章就介紹到這了,更多相關(guān)Python異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)socket非阻塞通訊功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)socket非阻塞通訊功能,結(jié)合實(shí)例形式分析了Python使用socket模塊進(jìn)行非阻塞通訊的原理、多線程及客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-11-11
Python進(jìn)階多線程爬取網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)
這篇文章主要為大家介紹了Python進(jìn)階,Python多線程爬取網(wǎng)頁(yè)項(xiàng)目實(shí)戰(zhàn)的示例呈現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
jupyter notebook遠(yuǎn)程訪問(wèn)不了的問(wèn)題解決方法
這篇文章主要介紹了jupyter notebook遠(yuǎn)程訪問(wèn)不了的問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python實(shí)例解析圖像形態(tài)學(xué)運(yùn)算技術(shù)
形態(tài)學(xué)處理方法是基于對(duì)二進(jìn)制圖像進(jìn)行處理的,卷積核決定圖像處理后的效果。本文將為大家詳細(xì)介紹一下OpenCV中的圖像形態(tài)學(xué),感興趣的可以了解一下2022-03-03
python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用
這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

