ipython事后调试:外部功能范围

ipython事后调试:外部功能范围,python,ipython,pdb,ipdb,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行魔术会在internal()的范围内打开pytho

考虑以下代码:

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
行魔术会在
internal()
的范围内打开python调试器:

[4]中的
:%debug
>(3)内部()
2如果a==75:
---->3引发运行时错误()
4返回a**2
ipdb>a
a=75
ipdb>结果
***NameError:未定义名称“结果”

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

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

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