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__ 异常的跟踪信息
相关推荐
moMo10 分钟前
Python 的 dict 和 set —— 有无value的区别
python
编程探索者小陈10 分钟前
接口自动化测试(一)
python·测试
峥嵘life40 分钟前
Android 蓝牙设备连接广播详解-2026
android·python·学习
郝学胜-神的一滴1 小时前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法
shehuiyuelaiyuehao1 小时前
多线程入门
java·python·算法
Oo9202 小时前
Prompt工程核心与Python 字典
python·ai编程
feeday2 小时前
gpt4o 图像反推提示词
开发语言·人工智能·python
沈浩(种子思维作者)2 小时前
没有错误,正确将一文不值
人工智能·python·算法·量子计算
smith成长之旅2 小时前
06 | Mem0 框架分析:为什么要从记忆中提取实体?——Entity Store 的设计动机与工程实现
人工智能·python
smith成长之旅2 小时前
07 | Mem0 框架分析:三路信号融合——语义 + BM25 + Entity Boost 的混合检索
python·算法