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

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

 更新時(shí)間:2025年08月19日 10:27:29   作者:Lumiron  
異常鏈?zhǔn)侵冈谔幚硪粋€(gè)異常時(shí)又引發(fā)了另一個(gè)異常,Python會(huì)自動(dòng)將原始異常和新異常關(guān)聯(lián)起來(lái),形成異常鏈,下面就來(lái)介紹一下Python異常鏈的使用,感興趣的可以了解一下

基本概念

Python中有兩種異常鏈。

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

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

隱式異常鏈

代碼示例:

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

輸出會(huì)顯示

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("處理除零錯(cuò)誤時(shí)出錯(cuò)")
ValueError: 處理除零錯(cuò)誤時(shí)出錯(cuò)

顯式異常鏈(使用from)

代碼示例:

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

輸出會(huì)顯示

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("新錯(cuò)誤") from original_error
ValueError: 新錯(cuò)誤

禁用異常鏈

使用from None可以禁用異常鏈

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

輸出只顯示新異常

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

訪問(wèn)異常鏈

可以通過(guò)異常的__cause__和__context__屬性訪問(wèn)異常鏈:

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

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

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

輸出顯示1:

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

示例代碼2:

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

輸出顯示2:

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

實(shí)際應(yīng)用場(chǎng)景

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

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

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}的記錄時(shí)出錯(cuò)") from e

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

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

最佳實(shí)踐

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

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

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

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

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

相關(guān)文章

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

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

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

    Python字符串格式化方式

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

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

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

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

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

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

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

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

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

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

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

    appium+python adb常用命令分享

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

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

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

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

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

最新評(píng)論

瑞昌市| 车险| 全州县| 景宁| 固始县| 遂平县| 宣武区| 兴山县| 庆云县| 武鸣县| 兴城市| 上高县| 榆林市| 辰溪县| 渭南市| 耿马| 梅河口市| 永川市| 黄大仙区| 台州市| 丹棱县| 紫阳县| 肃北| 天津市| 灵寿县| 新宾| 漯河市| 平邑县| 阳高县| 锦屏县| 云安县| 文安县| 盐山县| 揭东县| 体育| 仁布县| 仁化县| 高雄县| 揭西县| 新平| 平阴县|