在原始上下文中重新引发以进行调试

时间:2017-11-22 13:18:30

标签: python debugging exception exception-handling pdb

我希望做这样的事情,但是我想以一种方式提出异常,当我使用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中并将调试参数传递给它,但这真的很不优雅

1 个答案:

答案 0 :(得分:0)

如果您使用raise e,Python无法知道e是否是新的或仍然是以前的异常。如果您自己使用raise,它将再次抛出与上次相同的异常。

其他语言中存在相同的概念,例如: C#。比较throw e;throw;(不含e)。

如果使用e,Python和C#都会为异常分配新的堆栈跟踪。它将使用没有e的原始堆栈跟踪。