ipython事后调试:外部函数的范围

时间:2015-01-08 08:29:42

标签: python ipython pdb ipdb

请考虑以下代码:

def inner(a):
    if a == 75:
        raise RuntimeError()
    return a**2

def outer():
    results = []
    for a in range(100):
        results.append(inner(a))
    return results

outer()

在IPython中,在引发异常之后,%debug行魔法在inner()范围内打开python调试器:

In [4]: %debug
> <ipython-input-3-eff43b15b2ef>(3)inner()
      2     if a == 75:
----> 3         raise RuntimeError()
      4     return a**2

ipdb> a
a = 75
ipdb> results
*** NameError: name 'results' is not defined

如何告诉(i)pdb进入outer()的范围以保存到目前为止生成的结果?

1 个答案:

答案 0 :(得分:3)

我认为你不能直接这样做。但是,一旦进入调试器,您可以轻松地键入u(向上)以将当前帧向上移动一级并位于outer函数内。有关命令的更多信息,请参阅here