python 当信号被捕获时,如何强制PDB退出?

kfgdxczn  于 2023-01-29  发布在  Python
关注(0)|答案(2)|浏览(206)

PDB的quit命令通过引发一个异常(Bdb.BdbQuit)来工作,如果该异常被捕获,除了杀死整个shell之外,我找不到杀死程序的方法,CTRL+C通过引发一个KeyboardInterrupt异常来工作,该异常也可以被捕获。
您可以使用这个简单的脚本重新创建此问题。

foo = 0
while True:
    try:
        import pdb; pdb.set_trace()
        foo += 1
    except:
        pass

此脚本无法从PDB中使用退出命令或CTRL+C停止
我知道这是一个糟糕的编程,你永远不应该使用没有异常类型的except。我问这个问题是因为我在调试时遇到了这个问题,一个第三方库把我困在了循环中。

7tofc5zh

7tofc5zh1#

您可以尝试使用os._exit终止python进程。

import os
try:
    print("Exiting")
    os._exit(1)
except:
    print("Caught!")

输出:

Exiting
igetnqfo

igetnqfo2#

为什么不重新引发异常:

import bdb

try: 
   something_i_might_want_to_debug_with_pdb()
except bdb.BdbQuit as exc:
   raise exc
except:
    print("Caught!")

相关问题