如何在特定堆栈框架上输入PDB

时间:2018-12-28 22:33:26

标签: python pdb

我编写了一个在出现异常时进入PDB的函数(我们将其称为trace_on_error)。现在,当我调用pdb.set_trace()时,pdb会合理地进入trace_on_error的堆栈框架,这要求我必须先键入up命令,然后才能查看调用函数的框架。

我试图使trace_on_error不需要用户知道其实现方式,因此我想让pdb输入到调用者堆栈框架中。在寻找文档时,我希望找到与pdb.set_trace(frame_up=1)类似的东西,但没有发现任何东西。

示例代码:

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        pdb.set_trace()

如果您有兴趣查看完整的代码而不是最小的代码段,请访问此处:https://github.com/ethomas2/trace/blob/master/trace.py

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题(我已经对其进行了测试,但不确定是否在每种情况下都可以使用):

def trace_on_error(f, errors):
    try:
        return f()
    except errors as e:
        import sys
        from pdb import Pdb
        Pdb().set_trace(sys._getframe().f_back)