python - 如何使用附加信息重新引发异常?
问题描述
例如,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'})
这里的堆栈是正确的。
这是正确的方法吗?有没有更好的方法?
解决方案
是的,你做了“正确的事”:将信息适当地添加到异常变量中,然后重新引发异常。
您的第一次尝试创建了一个相同类型的新异常,这就是堆栈指针移动的原因。