我希望做这样的事情,但是我想以一种方式提出异常,当我使用pdb时,它会让我陷入risky_func
def outer_func(debug=True):
for i in some_lst:
try:
risky_func(i)
except Exception as e:
if debug:
raise e # go back to risky_func context in stack where exception originally occurred
# alternatively: pdb.set_trace(), but also going back to risky_func context
else:
pass
我唯一能想到的是将try / catch放在risky_func中并将调试参数传递给它,但这真的很不优雅
答案 0 :(得分:0)
如果您使用raise e
,Python无法知道e
是否是新的或仍然是以前的异常。如果您自己使用raise
,它将再次抛出与上次相同的异常。
其他语言中存在相同的概念,例如: C#。比较throw e;
和throw;
(不含e
)。
如果使用e
,Python和C#都会为异常分配新的堆栈跟踪。它将使用没有e
的原始堆栈跟踪。