我想知道是否有人会捕获正在运行的线程中的所有异常。我的程序由服务按以下步骤启动
def main():
global RUNNING
signal.signal(signal.SIGINT, stopHandler)
signal.signal(signal.SIGTERM, stopHandler)
projectAlice = ProjectAlice()
try:
while RUNNING:
time.sleep(0.1)
except KeyboardInterrupt:
pass
finally:
projectAlice.onStop()
_logger.info('Project Alice stopped, see you soon!')
因此CTRL-C或信号可以将其停止。 ProjectAlice永远运行,并回答Snips发送的mqtt主题。它使用带有loop_forever的paho-mqtt。因为它很大,所以即使不应该发生,也会发生错误。我会尽可能多地提供服务,但是今天,作为一个示例,google-translate开始抛出错误,因为它不再能够使用该服务(免费...)。未处理的错误...。因此线程崩溃,ProjectAlice保持原样。我希望,因为Java中的每个示例都有可能超级捕获所有异常并从那里进一步工作
答案 0 :(得分:1)
这是一个覆盖python异常钩子的简单解决方案,从而使您能够处理未捕获的异常:
import sys
def my_custom_exception_hook(exctype, value, tb):
print('Yo, do stuff here, handle specific exceptions and raise others or whatever')
在您的实际代码开始之前,请执行以下操作:
sys.excepthook = my_custom_exception_hook
答案 1 :(得分:0)
简单的except Exception:
将在同一线程中捕获除KeyboardInterrupt和SystemExit 以外的所有异常。
您必须在线程中运行的代码中包含try: except ...:
块,才能捕获线程中发生的异常。