首页 > 解决方案 > 捕获类中的所有异常

问题描述

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

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。由于它非常大,因此可能会发生错误,即使它们不应该发生。我尽我所能,但今天,作为一个例子,谷歌翻译开始抛出错误,因为它不能再使用该服务(免费......)。未处理的错误....所以线程崩溃并且 ProjectAlice 保持原样。我想,因为在 Java 中的每个例子都是可能的,超级捕获所有异常并从那里进一步工作

标签: pythonpython-2.7

解决方案


这是一个覆盖 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

推荐阅读