PDB 的退出命令通过引发异常来工作 (
Bdb.BdbQuit
)。如果捕获到该异常,我无法找到一种方法来杀死该程序而不杀死整个外壳。 CTRL+C 通过引发 KeyboardInterrupt
异常来工作,该异常也可以被捕获。
您可以使用这个简单的脚本重现此问题。
foo = 0
while True:
try:
import pdb; pdb.set_trace()
foo += 1
except:
pass
此脚本无法使用退出命令或 CTRL+C 从 PDB 中停止。
我知道这是糟糕的编程,你不应该在没有异常类型的情况下使用
except
。我问这个问题是因为我在调试时遇到了这个问题,并且第三方库将我困在了循环中。
os._exit
来终止 python 进程。
import os
try:
print("Exiting")
os._exit(1)
except:
print("Caught!")
输出:
Exiting
为什么不重新引发异常:
import bdb
try:
something_i_might_want_to_debug_with_pdb()
except bdb.BdbQuit as exc:
raise exc
except:
print("Caught!")