欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

基本概念

Python中有兩種異常鏈。

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

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

隱式異常鏈

代碼示例:

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

輸出會顯示

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

輸出會顯示

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ò)誤

訪問異常鏈

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

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

2、context: 隱式關(guān)聯(lián)的異常
測試代碼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)用場景

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}的記錄時(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 理解Python中的絕對路徑和相對路徑

    理解Python中的絕對路徑和相對路徑

    本篇文章主要介紹了理解Python中的絕對路勁和相對路徑 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇

    Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇

    相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始入門篇
    2022-08-08
  • Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作

    Python接口自動(dòng)化淺析logging封裝及實(shí)戰(zhàn)操作

    本篇文章主要給大家介紹將了logging常用配置放入yaml配置文件、logging日志封裝及結(jié)合登錄用例,講解日志如何在接口測試中運(yùn)用的實(shí)例操作
    2021-08-08
  • 詳解python?Warning警告有哪些情況

    詳解python?Warning警告有哪些情況

    這篇文章主要為大家介紹分析了python?Warning警告有哪些情況示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解Python?中的命名空間、變量和范圍

    詳解Python?中的命名空間、變量和范圍

    Python 是一種動(dòng)態(tài)類型語言,在程序執(zhí)行期間,變量名可以綁定到不同的值和類型,這篇文章主要介紹了Python?中的命名空間、變量和范圍,需要的朋友可以參考下
    2022-09-09
  • python實(shí)現(xiàn)區(qū)間合并的方法

    python實(shí)現(xiàn)區(qū)間合并的方法

    區(qū)間合并是指將重疊的區(qū)間合并為一個(gè)或多個(gè)不重疊的區(qū)間,本文主要介紹了python實(shí)現(xiàn)區(qū)間合并的方法,文中通過代碼介紹的很詳細(xì),感興趣的可以了解一下
    2024-02-02
  • python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì)

    python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì)

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Django實(shí)現(xiàn)文件上傳下載

    Django實(shí)現(xiàn)文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python中seaborn庫之countplot的數(shù)據(jù)可視化使用

    Python中seaborn庫之countplot的數(shù)據(jù)可視化使用

    在Python數(shù)據(jù)可視化中,seaborn較好的提供了圖形的一些可視化功效。本文詳細(xì)的介紹了Python中seaborn庫之countplot的數(shù)據(jù)可視化使用,感興趣的可以了解一下
    2021-06-06
  • python爬取酷狗音樂Top500榜單

    python爬取酷狗音樂Top500榜單

    大家好,本篇文章主要講的是python爬取酷狗音樂Top500榜單,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論