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ī)制

二、常見異常類型
1. 內(nèi)置異常層次
所有異常類都繼承 BaseException
BaseException
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── ZeroDivisionError
│ └── FloatingPointError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── OSError
│ ├── FileNotFoundError
│ └── PermissionError
└── ValueError
2. 常見異常示例
# 文件操作
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("處理失敗")
?? 避免陷阱
- 捕獲過于寬泛的異常
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ò)連接問題")
if attempt < retries - 1:
sleep(2 ** attempt) # 指數(shù)退避
raise Exception(f"請(qǐng)求失敗,已重試{retries}次")
# 使用示例
data = fetch_data("https://api.example.com/data")
通過掌握這些異常處理技巧,您可以:
- 編寫更健壯的程序
- 提高錯(cuò)誤診斷效率
- 創(chuàng)建更友好的用戶交互體驗(yàn)
- 構(gòu)建可維護(hù)的異常處理體系
建議在實(shí)際開發(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ù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)全過程
在數(shù)據(jù)分析中,有時(shí)數(shù)據(jù)源會(huì)是超大的文本文件(幾G,或在幾十G),需要從中提取需要的信息,下面這篇文章主要給大家介紹了關(guān)于Python大數(shù)據(jù)量文本文件高效解析方案代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-12-12
Python PDF識(shí)別之文本內(nèi)容與表格提取方法總結(jié)
這篇文章主要帶大家深入探討多種PDF文本與表格提取方法,結(jié)合實(shí)際代碼示例,為大家呈現(xiàn)一份全面的PDF提取指南,希望對(duì)大家有所幫助2025-08-08
Django xadmin開啟搜索功能的實(shí)現(xiàn)
今天小編就為大家分享一篇Django xadmin開啟搜索功能的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python3 實(shí)現(xiàn)串口兩進(jìn)程同時(shí)讀寫
今天小編就為大家分享一篇Python3 實(shí)現(xiàn)串口兩進(jìn)程同時(shí)讀寫,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python趣味爬蟲之用Python實(shí)現(xiàn)智慧校園一鍵評(píng)教
你還在為智慧校園每周的評(píng)教而苦惱嗎?今天我來幫你解放雙手,用Python實(shí)現(xiàn)一鍵評(píng)教,從此生活無(wú)憂無(wú)慮,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下2021-05-05
python獲取一組數(shù)據(jù)里最大值max函數(shù)用法實(shí)例
這篇文章主要介紹了python獲取一組數(shù)據(jù)里最大值max函數(shù)用法,實(shí)例分析了max函數(shù)的使用技巧,需要的朋友可以參考下2015-05-05

