这个问题我想了很久,但一直没有找到合适的解决方案。如果我运行一个脚本,遇到一个IndexError, python会打印出错误的行、位置和快速描述,然后退出。是否有可能在遇到错误时自动启动pdb ?我并不反对在文件顶部添加额外的import语句,也不反对添加几行额外的代码。
当前回答
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 -m PDB script.py在python2.7中按continue start,它将运行到错误处并在那里中断以进行调试。
如果您正在使用ipython,启动后键入%pdb
In [1]: %pdb
Automatic pdb calling has been turned ON
你可以在代码中加入这一行:
import pdb ; pdb.set_trace()
更多信息:在任意一行启动python调试器
从3.7开始,你可以在你的代码中直接使用关键字breakpoint(不需要任何导入),就像这样:
try:
... # The line that raises an error
except:
breakpoint()
IPython在命令行上简化了这一点:
python myscript.py arg1 arg2
可以改写为
ipython --pdb myscript.py -- arg1 arg2
或者,类似地,如果调用一个模块:
python -m mymodule arg1 arg2
可以改写为
ipython --pdb -m mymodule -- arg1 arg2
注意使用——来阻止IPython将脚本的参数当作自己的参数读取。
这还具有调用增强的IPython调试器(ipdb)而不是pdb的优点。
推荐文章
- python中的assertEquals和assertEqual
- 如何保持Python打印不添加换行符或空格?
- 为什么Python的无穷散列中有π的数字?
- Python 3.7数据类中的类继承
- 如何检查Flutter应用程序是否正在调试中运行?
- 如何在PyTorch中初始化权重?
- 计数唯一的值在一列熊猫数据框架像在Qlik?
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?