自动启动python调试器错误 [英] Starting python debugger automatically on error
问题描述
这是一个我想知道的一段时间的问题,但我从未找到合适的解决方案。如果我运行一个脚本,我遇到了,我们来说一个IndexError,python打印行,位置和错误的快速描述并退出。遇到错误时是否可以自动启动pdb?我不反对在文件的顶部有一个额外的导入语句,也不是一些额外的代码行。
This is a question I have wondered about for quite some time, yet I have never found a suitable solution. If I run a script and I come across, let's say an IndexError, python prints the line, location and quick description of the error and exits. Is it possible to automatically start pdb when an error is encountered? I am not against having an extra import statement at the top of the file, nor a few extra lines of code.
推荐答案
你可以使用 traceback.print_exc 打印例外追踪。然后使用 sys.exc_info 提取回溯,最后调用 pdb.post_mortem 与该追踪
You can use traceback.print_exc to print the exceptions traceback. Then use sys.exc_info to extract the traceback and finally call pdb.post_mortem with that traceback
import pdb, traceback, sys
def bombs():
a = []
print a[0]
if __name__ == '__main__':
try:
bombs()
except:
type, value, tb = sys.exc_info()
traceback.print_exc()
pdb.post_mortem(tb)
如果要启动交互式命令行使用 code.interact 使用可以执行异常的框架的本地人
If you want to start an interactive command line with code.interact using the locals of the frame where the exception originated you can do
import traceback, sys, code
def bombs():
a = []
print a[0]
if __name__ == '__main__':
try:
bombs()
except:
type, value, tb = sys.exc_info()
traceback.print_exc()
last_frame = lambda tb=tb: last_frame(tb.tb_next) if tb.tb_next else tb
frame = last_frame().tb_frame
ns = dict(frame.f_globals)
ns.update(frame.f_locals)
code.interact(local=ns)
这篇关于自动启动python调试器错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!