这可能不是解决方法。
您应该修改/扩展现有的 pdb.py。代码如下所示:
while True:
try:
pdb._runscript(mainpyfile)
if pdb._user_requested_quit:
break
print "The program finished and will be restarted"
except:
traceback.print_exc()
print "Uncaught exception. Entering post mortem debugging"
print "Running 'cont' or 'step' will restart the program"
t = sys.exc_info()[2]
pdb.interaction(None, t)
print "Post mortem debugger finished. The "+mainpyfile+" will be restarted"
看起来你可以用类似的东西替换 `pdb._runscript(mainpyfile)'
runpy.run_module(sys.argv[0], run_name="__main__", alter_sys=True)
(来自PEP 338)。
不是一个完整的解决方案,我还没有测试过,但也许它有帮助。
编辑:但对于一个更简单的解决方案,对于单个脚本,您的脚本可能以如下内容结尾:
if __name__ == '__main__':
call_main_function()
你只需更换它
if __name__ == '__main__':
try:
call_main_function()
except:
import pdb
t = sys.exc_info()[2]
pdb.interaction(None, t)
(从 pdb.py 窃取的最后一个代码,这正是它在遇到未处理的异常时所做的)。