这个问题我想了很久,但一直没有找到合适的解决方案。如果我运行一个脚本,遇到一个IndexError, python会打印出错误的行、位置和快速描述,然后退出。是否有可能在遇到错误时自动启动pdb ?我并不反对在文件顶部添加额外的import语句,也不反对添加几行额外的代码。
当前回答
如果您正在使用IPython环境,您可以只使用%debug, shell将带您回到ipdb环境中的违规行进行检查等。上面提到的另一个选项是使用iPython magic %pdb,它可以有效地完成同样的工作。
其他回答
在层次结构中最顶层异常类的构造函数中放置断点,大多数情况下您将看到哪里引发了错误。
设置断点意味着任何您想要的含义:您可以使用IDE或pdb。Set_trace之类的
要让它运行而不需要在开始时输入c,请使用:
python -m pdb -c c <script name>
Pdb有自己的命令行参数:-c c将在执行开始时执行c(continue)命令,程序将不间断地运行,直到出现错误。
如果您正在使用IPython环境,您可以只使用%debug, shell将带您回到ipdb环境中的违规行进行检查等。上面提到的另一个选项是使用iPython magic %pdb,它可以有效地完成同样的工作。
python -m pdb -c continue myscript.py
如果你没有提供-c continue标志,那么你需要在执行开始时输入'c'(代表continue)。然后它会运行到错误点并在那里给你控制权。正如eqzx所提到的,该标志是python 3.2中的新添加,因此在早期的python版本中需要输入'c'(请参阅https://docs.python.org/3/library/pdb.html)。
这不是调试器,但可能同样有用(?)
我知道我听圭多在某个地方的演讲中提到过这个。
我刚刚检查了python -?,如果您使用-i命令,您可以在脚本停止的地方进行交互。
给定这个脚本:
testlist = [1,2,3,4,5, 0]
prev_i = None
for i in testlist:
if not prev_i:
prev_i = i
else:
result = prev_i/i
您可以得到这个输出!
PS D:\> python -i debugtest.py
Traceback (most recent call last):
File "debugtest.py", line 10, in <module>
result = prev_i/i
ZeroDivisionError: integer division or modulo by zero
>>>
>>>
>>> prev_i
1
>>> i
0
>>>
说实话,我没用过这个,但我应该用,看起来很有用。
推荐文章
- ValueError: numpy。Ndarray大小改变,可能表示二进制不兼容。期望从C头得到88,从PyObject得到80
- Anaconda /conda -安装特定的软件包版本
- 我在哪里调用Keras的BatchNormalization函数?
- 打印测试执行时间并使用py.test锁定缓慢的测试
- 插入一行到熊猫数据框架
- 要列出Pandas DataFrame列
- 在Django模型中存储电话号码的最佳方法是什么?
- 从导入的模块中模拟函数
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 滚动或滑动窗口迭代器?
- python的方法找到最大值和它的索引在一个列表?
- 如何读取文件的前N行?
- 如何删除matplotlib中的顶部和右侧轴?
- 解析.py文件,读取AST,修改它,然后写回修改后的源代码
- Visual Studio Code:如何调试Python脚本的参数