Python异常链

异常链是Python中一个重要的概念,它允许在捕获一个异常后抛出另一个异常,同时保留原始异常的信息。

复制代码
def process_data():
    try:
        # 模拟一个原始异常
        raise ValueError("原始数据错误")
    except ValueError as e:
        # 在处理过程中抛出新的异常
        raise RuntimeError("处理数据时发生错误") from e

try:
    process_data()
except RuntimeError as e:
    print(f"捕获的异常: {e}")
    print(f"原始异常: {e.__cause__}")

'''
输出:
捕获的异常: 处理数据时发生错误
原始异常: 原始数据错误
'''

异常链的两种形式

隐式异常链

当在except块中抛出新的异常时,Python会自动创建异常链。

复制代码
def implicit_chaining():
    try:
        # 第一个异常
        raise ValueError("第一个错误")
    except ValueError:
        # 在except块中直接抛出新异常
        raise RuntimeError("第二个错误")

try:
    implicit_chaining()
except RuntimeError as e:
    print(f"当前异常: {e}")
    print(f"隐式上下文: {e.__context__}")
'''
输出:
当前异常: 第二个错误
隐式上下文: 第一个错误
'''

显式异常链

使用raise ... from ...语法明确指定异常链关系。

复制代码
def explicit_chaining():
    try:
        raise ValueError("原始错误")
    except ValueError as original_error:
        # 明确指定异常链
        raise RuntimeError("新错误") from original_error

try:
    explicit_chaining()
except RuntimeError as e:
    print(f"当前异常: {e}")
    print(f"显式原因: {e.__cause__}")
''''
输出:
当前异常: 新错误
显式原因: 原始错误
'''

异常链的属性

属性 描述
__cause__ 使用from明确指定的直接原因
__context__ 自动捕获的上下文异常
__traceback__ 异常的跟踪信息
相关推荐
biuyyyxxx31 分钟前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
极客数模44 分钟前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
小鸡吃米…2 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily3 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_561359673 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov3 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
2401_838472514 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
CoLiuRs5 小时前
语义搜索系统原理与实现
redis·python·向量·es
zhihuaba5 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
u0109272715 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python