如何在捕获信号时强制 PDB 退出?

问题描述 投票:0回答:2

PDB 的退出命令通过引发异常来工作 (

Bdb.BdbQuit
)。如果捕获到该异常,我无法找到一种方法来杀死该程序而不杀死整个外壳。 CTRL+C 通过引发
KeyboardInterrupt
异常来工作,该异常也可以被捕获。

您可以使用这个简单的脚本重现此问题。

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

此脚本无法使用退出命令或 CTRL+C 从 PDB 中停止

我知道这是糟糕的编程,你不应该在没有异常类型的情况下使用

except
。我问这个问题是因为我在调试时遇到了这个问题,并且第三方库将我困在了循环中。

python pdb
2个回答
4
投票

您可以尝试使用

os._exit
来终止 python 进程。

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

输出:

Exiting

0
投票

为什么不重新引发异常:

import bdb

try: 
   something_i_might_want_to_debug_with_pdb()
except bdb.BdbQuit as exc:
   raise exc
except:
    print("Caught!")
© www.soinside.com 2019 - 2024. All rights reserved.