ipdb遇到错误后继续

时间:2019-01-07 09:53:33

标签: python debugging

我通过以下方式使用ipdb调试器:

ipython --pdb bugged.py

在文件 bugged.py 上:

import numpy as np

a = np.array([0, 1, 2])
print(a[5])
a = 2 + a
print(a)

然后发生的事情是调试器在错误的行开始运行;这是预期的行为:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/home/jrlab/Desktop/Current/debug_ipython/bugged.py in <module>()
      2 
      3 a = np.array([0, 1, 2])
----> 4 print(a[5])
      5 a = 2 + a
      6 print(a)

IndexError: index 5 is out of bounds for axis 0 with size 3
> /home/jrlab/Desktop/Current/debug_ipython/bugged.py(4)<module>()
      2 
      3 a = np.array([0, 1, 2])
----> 4 print(a[5])
      5 a = 2 + a
      6 print(a)

ipdb> n
~/Desktop/Current/debug_ipython>

但是我真正想要的是当我按 n (或任何其他命令)时,在下一条指令处继续执行,也就是说,一旦我通过以下方式修复,便能够继续运行脚本用手命令执行错误的行。

有什么办法吗?

编辑

1:在脚本需要很长时间才能运行的情况下,我希望这种行为。当我在脚本中间修复了一个小错误时,我希望能够恢复执行,而无需从头开始进行耗时的重新运行。

2:我知道此错误是什么,我知道如何解决。越野车代码仅作为说明我想要的行为的一种方式显示(即,如果需要的话,可以在print(a [5])之后恢复代码。

1 个答案:

答案 0 :(得分:0)

好吧,您会收到一条错误消息,因为有问题的行Trie可以访问仅包含3的数组的第6个元素。

通常,Python调试器允许跳过有问题的行,不确定ipython。但是在我的标准安装中,我可以这样做:

j 5
n

j 5在有问题的行之后设置当前行,而n成功执行它。