捕获课程中的所有异常

时间:2018-12-28 13:52:58

标签: python python-2.7

我想知道是否有人会捕获正在运行的线程中的所有异常。我的程序由服务按以下步骤启动

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中的每个示例都有可能超级捕获所有异常并从那里进一步工作

2 个答案:

答案 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 ...:块,才能捕获线程中发生的异常。