@
lvii 哎呀我也是Python新手, 个人觉得这是个BUG, 而且感觉是个坑, 而且我太懒了, 不想深入研究...你懂的. 有几个问题
1. 看gist你用的是Linux环境? 我用的是Windows, python 2.7.3, 可能有所不同, 我这里放到pdb.run里面后, 按'q'退出没有异常.
不放到pdb.run()里, 按'q'退出异常, 但是用python -m pdb同样按'q'退出也没有异常.
2. 我看gist里提到的issue16446里的patch, 做的事大概是保存了一个trace前的frame, 退出调试的时候还原那个frame, 所以我猜测set_trace调用的时候是会改动程序执行上下文的一些东东的, 退出的时候没还原, 就异常了. 但是放到pdb.run里面, 可能run函数会做一些清理(或者说把异常捕捉并处理了?), 具体我就不清楚了...
3. 我还遇到一个类似的问题,
就是不论用不用pdb.run(), 进入pdb交互状态后, 执行run命令重新调试程序, 会抛出一个Restart异常. 但是用python -m pdb就没这个问题. 具体原因就没有深究了...
如果有啥新发现欢迎分享.