如何在保留原有信息的同时重新抛出异常?

6

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'})

这里的堆栈是正确的。

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


你可以使用第一种方法,并通过以下方式保留原始指针:raise type(e)(*(e.args+(d,))) from e - Tomerikoo
为什么要踩我? - sds
1个回答

2
是的,你做得很对:根据需要将信息添加到异常变量中,然后重新引发异常。
你的第一次尝试创建了一个相同类型的新异常,这就是为什么堆栈指针移动的原因。
最初的回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接