Python異常處理操作舉例詳細(xì)教程
一、異常處理基礎(chǔ)
1. 基本語法結(jié)構(gòu)
try: # 可能引發(fā)異常的代碼 result = 10 / 0 except ZeroDivisionError: # 處理特定異常 print("不能除以零!") except Exception as e: # 通用異常處理 print(f"發(fā)生錯(cuò)誤: {e}") else: # 無異常時(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("無效的數(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"無效郵箱格式: {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 語法
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"無效參數(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í)現(xiàn)socket非阻塞通訊功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)socket非阻塞通訊功能,結(jié)合實(shí)例形式分析了Python使用socket模塊進(jìn)行非阻塞通訊的原理、多線程及客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-11-11Python進(jìn)階多線程爬取網(wǎng)頁項(xiàng)目實(shí)戰(zhàn)
這篇文章主要為大家介紹了Python進(jìn)階,Python多線程爬取網(wǎng)頁項(xiàng)目實(shí)戰(zhàn)的示例呈現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10jupyter notebook遠(yuǎn)程訪問不了的問題解決方法
這篇文章主要介紹了jupyter notebook遠(yuǎn)程訪問不了的問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python實(shí)例解析圖像形態(tài)學(xué)運(yùn)算技術(shù)
形態(tài)學(xué)處理方法是基于對(duì)二進(jìn)制圖像進(jìn)行處理的,卷積核決定圖像處理后的效果。本文將為大家詳細(xì)介紹一下OpenCV中的圖像形態(tài)學(xué),感興趣的可以了解一下2022-03-03python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用
這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫(kù)xgboost的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01