我知道如果我想重新引发异常,我会raise
在相应的except
块中简单地使用不带参数的形式。但是给定一个嵌套的表达式
try:
something()
except SomeError as e:
try:
plan_B()
except AlsoFailsError:
raise e # I'd like to raise the SomeError as if plan_B()
# didn't raise the AlsoFailsError
我如何在SomeError
不破坏堆栈跟踪的情况下重新筹集?raise
在这种情况下,仅此一项便会重新提高AlsoFailsError
。或者我该如何重构我的代码来避免此问题?
@DrewMcGowen不幸的是,更现实的情况是该函数位于接受任意对象的函数内部,
—
Tobias Kienzler 2013年
arg
并且我将尝试调用arg.plan_B()
该函数,这可能是AttributeError
由于arg
未提供计划B 而引起的
@Paco谢谢,我会(尽管答案已经显示出一种简单的方法)
—
Tobias Kienzler 2013年
plan_B
过添加另一个True
在成功和False
异常情况下返回的函数?那么外面的except
障碍可能就是if not try_plan_B(): raise