首页 > 解决方案 > 如何使用附加信息重新引发异常?

问题描述

例如,Python 报告KeyError仅包含丢失的键,而不是未找到该键的字典。

我想在我的代码中“修复”这个问题:

d = {1:"2"}
try:
    d[5]
except Exception as e:
    raise type(e)(*(e.args+(d,)))

----> 5     raise type(e)(*e.args+(d,))
KeyError: (5, {1: '2'})

唉,堆栈指向错误的行。

第二次尝试:

d = {1:"2"}
try:
    d[5]
except Exception as e:
    e.args += (d,) 
    raise e

----> 3     d[5]
KeyError: (5, {1: '2'})

这里的堆栈是正确的。

这是正确的方法吗?有没有更好的方法?

标签: pythonpython-3.xexception

解决方案


是的,你做了“正确的事”:将信息适当地添加到异常变量中,然后重新引发异常。

您的第一次尝试创建了一个相同类型的新异常,这就是堆栈指针移动的原因。


推荐阅读