为了账号安全,请及时绑定邮箱和手机立即绑定

捕获类中的所有异常

捕获类中的所有异常

慕后森 2021-09-28 13:22:21
我想知道是否有人会想在正在运行的线程中捕获所有异常。我的程序启动如下,由服务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 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-09-28
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

一个简单的except Exception:在同一线程中捕获除 KeyboardInterrupt 和 SystemExit 之外的所有异常。

您必须try: except ...:在线程中运行的代码中包含块以捕获线程中发生的异常。


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信