在原始上下文中重新释放以进行调试

2024-06-16 11:04:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做这样的事情,但是我想提出一个异常,当我使用pdb时,它会把我放到有风险的函数中

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放在func中,并将debug参数传递给它,但这真的很不雅观


Tags: to函数indebugtruedefcontextback
1条回答
网友
1楼 · 发布于 2024-06-16 11:04:39

如果使用raise e,Python就无法知道e是新的异常还是与以前相同的异常。如果您只是单独使用raise,它将再次抛出与上次相同的异常

同样的概念也存在于其他语言中,例如C#。比较throw e;throw;(没有e

如果使用e,Python和C#都将为异常分配一个新的堆栈跟踪。它将使用不带e的原始stacktrace

相关问题 更多 >