最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中異常鏈(Exception Chaining)的使用

 更新時間:2025年08月19日 10:27:29   作者:Lumiron  
異常鏈是指在處理一個異常時又引發(fā)了另一個異常,Python會自動將原始異常和新異常關(guān)聯(lián)起來,形成異常鏈,下面就來介紹一下Python異常鏈的使用,感興趣的可以了解一下

基本概念

Python中有兩種異常鏈。

1、隱式異常鏈:當(dāng)在except塊中引發(fā)新異常時自動創(chuàng)建

2、顯式異常鏈:使用raise … from …語法顯式創(chuàng)建

隱式異常鏈

代碼示例:

try:
    # 可能引發(fā)異常的代碼
    1 / 0
except ZeroDivisionError:
    # 在處理過程中又引發(fā)了新異常(主動拋出新異常)
    raise ValueError("處理除零錯誤時出錯")

輸出會顯示

Traceback (most recent call last):
  File "D:\PythonProject\Learn_250816\except_chain.py", line 3, in <module>
    1 / 0
    ~~^~~
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\PythonProject\Learn_250816\except_chain.py", line 6, in <module>
    raise ValueError("處理除零錯誤時出錯")
ValueError: 處理除零錯誤時出錯

顯式異常鏈(使用from)

代碼示例:

try:
    1 / 0
except ZeroDivisionError as original_error:
    raise ValueError("新錯誤") from original_error

輸出會顯示

Traceback (most recent call last):
  File "D:\PythonProject\Learn_250816\except_chain.py", line 10, in <module>
    1 / 0
    ~~^~~
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\PythonProject\Learn_250816\except_chain.py", line 12, in <module>
    raise ValueError("新錯誤") from original_error
ValueError: 新錯誤

禁用異常鏈

使用from None可以禁用異常鏈

try:
    1 / 0
except ZeroDivisionError:
    raise ValueError("新錯誤") from None

輸出只顯示新異常

Traceback (most recent call last):
  File "D:\PythonProject\Learn_250816\except_chain.py", line 17, in <module>
    raise ValueError("新錯誤") from None
ValueError: 新錯誤

訪問異常鏈

可以通過異常的__cause__和__context__屬性訪問異常鏈:

1、cause: 顯式使用from設(shè)置的異常

2、context: 隱式關(guān)聯(lián)的異常
測試代碼1:

try:
    try:
        1 / 0
    except ZeroDivisionError as e:
        raise ValueError("新錯誤") from e
except ValueError as ve:
    print(f"當(dāng)前異常: {ve}")
    print(f"顯式原因: {ve.__cause__}")
    print(f"隱式上下文: {ve.__context__}")

輸出顯示1:

當(dāng)前異常: 新錯誤
顯式原因: division by zero
隱式上下文: division by zero

示例代碼2:

try:
    try:
        1 / 0
    except ZeroDivisionError as e:
        raise ValueError("新錯誤")
except ValueError as ve:
    print(f"當(dāng)前異常: {ve}")
    print(f"顯式原因: {ve.__cause__}")
    print(f"隱式上下文: {ve.__context__}")

輸出顯示2:

當(dāng)前異常: 新錯誤
顯式原因: None
隱式上下文: division by zero

實際應(yīng)用場景

1.轉(zhuǎn)換異常類型

將底層異常轉(zhuǎn)換為更高級別的異常

try:
    config = load_config()
except FileNotFoundError as e:
    raise ConfigurationError("配置文件缺失") from e

2.添加上下文信息

try:
    process_data(data)
except ProcessingError as e:
    raise ProcessingError(f"處理ID為{data.id}的記錄時出錯") from e

3.屏蔽底層細節(jié)

try:
    connect_to_database()
except DatabaseError:
    raise ServiceUnavailableError("服務(wù)暫時不可用") from None

最佳實踐

1、使用raise … from …明確表達異常之間的關(guān)系

2、在需要屏蔽底層實現(xiàn)細節(jié)時使用from None

3、為自定義異常提供清晰的錯誤信息

4、在日志中記錄完整的異常鏈信息

到此這篇關(guān)于Python中異常鏈(Exception Chaining)的使用的文章就介紹到這了,更多相關(guān)Python 異常鏈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python線程同步的實現(xiàn)代碼

    Python線程同步的實現(xiàn)代碼

    本文介紹了threading 模塊提供的線程同步原語包括:Lock、RLock、Condition、Event、Semaphore等對象。對大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2018-10-10
  • Python字符串格式化方式

    Python字符串格式化方式

    這篇文章主要介紹了Python字符串格式化方式,字符串格式化在我們的開發(fā)過程中被廣泛的應(yīng)用,因此也是我們要重點掌握的內(nèi)容之一,下文相關(guān)介紹,需要的朋友可以參考一下
    2022-04-04
  • python開發(fā)之函數(shù)定義實例分析

    python開發(fā)之函數(shù)定義實例分析

    這篇文章主要介紹了python開發(fā)之函數(shù)定義方法,以實例形式較為詳細的分析了Python中函數(shù)的定義與使用技巧,需要的朋友可以參考下
    2015-11-11
  • Python打包EXE后文件太大的三個壓縮技巧

    Python打包EXE后文件太大的三個壓縮技巧

    Python 作為一門強大的編程語言,廣泛應(yīng)用于桌面應(yīng)用開發(fā),但許多開發(fā)者在使用 PyInstaller 等工具打包 Python 腳本為 EXE 文件時,常常遇到一個頭疼問題:生成的安裝包體積過大,本文將介紹三個實用壓縮技巧,幫助你輕松將安裝包體積減半,需要的朋友可以參考下
    2025-12-12
  • python中對二維列表中一維列表的調(diào)用方法

    python中對二維列表中一維列表的調(diào)用方法

    在本文里小編給大家整理的是關(guān)于python中對二維列表中一維列表的調(diào)用方法,正在學(xué)習(xí)的朋友們可以參考下。
    2020-06-06
  • 淺析如何使用python dotenv模塊管理環(huán)境變量

    淺析如何使用python dotenv模塊管理環(huán)境變量

    在開發(fā)Python應(yīng)用程序時,管理配置信息是一個常見的需求,本文主要來和大家講講通過python-dotenv模塊幫助我們輕松地從文件中讀取環(huán)境變量并在程序中使用,感興趣的可以了解下
    2025-05-05
  • Python 獲取當(dāng)前路徑3種方法

    Python 獲取當(dāng)前路徑3種方法

    本文主要介紹了Python 獲取當(dāng)前路徑3種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • appium+python adb常用命令分享

    appium+python adb常用命令分享

    這篇文章主要介紹了appium+python adb常用命令分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python?shapefile轉(zhuǎn)GeoJson的2種方式實例

    Python?shapefile轉(zhuǎn)GeoJson的2種方式實例

    geojson是地圖可視化系統(tǒng)中最常用的地理數(shù)據(jù)格式,幾乎所有主流地圖可視化庫或框架都支持geojson數(shù)據(jù)的加載,下面這篇文章主要給大家介紹了關(guān)于Python?shapefile轉(zhuǎn)GeoJson的2種方式的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Python中導(dǎo)入模塊的幾種方式總結(jié)

    Python中導(dǎo)入模塊的幾種方式總結(jié)

    模塊就是用一堆的代碼實現(xiàn)了一些功能的代碼的集合,通常一個或者多個函數(shù)寫在一個.py文件里,下面這篇文章主要給大家介紹了關(guān)于Python中導(dǎo)入模塊的幾種方式,需要的朋友可以參考下
    2022-12-12

最新評論

盐边县| 巨鹿县| 西青区| 奇台县| 壤塘县| 宜良县| 大姚县| 通江县| 甘洛县| 海南省| 托克逊县| 石景山区| 藁城市| 甘泉县| 深泽县| 云阳县| 会昌县| 迁安市| 聊城市| 尤溪县| 当雄县| 二连浩特市| 若尔盖县| 德兴市| 石泉县| 东至县| 黑水县| 右玉县| 汉源县| 黄陵县| 称多县| 抚州市| 镇巴县| 斗六市| 佛山市| 乡宁县| 池州市| 舟山市| 衢州市| 辽中县| 桃园县|