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__ 异常的跟踪信息
相关推荐
gpfyyds66624 分钟前
Python代码练习
开发语言·python
aiguangyuan2 小时前
使用LSTM进行情感分类:原理与实现剖析
人工智能·python·nlp
小小张说故事2 小时前
BeautifulSoup:Python网页解析的优雅利器
后端·爬虫·python
luoluoal2 小时前
基于python的医疗领域用户问答的意图识别算法研究(源码+文档)
python
Shi_haoliu2 小时前
python安装操作流程-FastAPI + PostgreSQL简单流程
python·postgresql·fastapi
ZH15455891312 小时前
Flutter for OpenHarmony Python学习助手实战:API接口开发的实现
python·学习·flutter
小宋10212 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
一晌小贪欢3 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
躺平大鹅3 小时前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python