我知道如果我想重新引发异常,我会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