【发布时间】:2019-01-07 09:53:33
【问题描述】:
我使用 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 (或任何其他命令)时继续执行下一条指令,也就是说,一旦我通过hand with ! 命令执行故障行。
有什么办法吗?
编辑
1:在脚本需要很长时间运行的情况下,我想要这种行为;当我修复脚本中间的一个小错误时,我希望能够恢复执行,而无需从头开始重新运行耗时。
2:我知道这个错误是什么,我知道如何修复它。错误代码仅作为说明我想要的行为的一种方式(即,如果我愿意,可以在 print(a[5]) 之后恢复代码。
【问题讨论】:
-
我认为可能有办法获得这种行为,但不确定如何。这个想法是,人们已经在 IPython 中获得了这种行为:每个单元格可以有一行代码,然后当一个单元格崩溃时修复它,然后再次继续从下面运行单元格。问题是,我们如何从命令行获得类似的东西?