这个问题我想了很久,但一直没有找到合适的解决方案。如果我运行一个脚本,遇到一个IndexError, python会打印出错误的行、位置和快速描述,然后退出。是否有可能在遇到错误时自动启动pdb ?我并不反对在文件顶部添加额外的import语句,也不反对添加几行额外的代码。
当前回答
如果您正在使用ipython,启动后键入%pdb
In [1]: %pdb
Automatic pdb calling has been turned ON
其他回答
如果您正在使用ipython,启动后键入%pdb
In [1]: %pdb
Automatic pdb calling has been turned ON
Ipdb有一个很好的上下文管理器来实现这种行为,这使得意图在语义上更清晰:
from ipdb import launch_ipdb_on_exception
with launch_ipdb_on_exception():
...
Ipython有一个用于切换这种行为的命令:%pdb。它所做的与您所描述的完全相同,甚至可能更多(通过语法高亮显示和代码补全为您提供更多信息回溯)。这绝对值得一试!
要让它运行而不需要在开始时输入c,请使用:
python -m pdb -c c <script name>
Pdb有自己的命令行参数:-c c将在执行开始时执行c(continue)命令,程序将不间断地运行,直到出现错误。
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的优点。
推荐文章
- 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脚本的参数