我想知道是否有人会想在正在运行的线程中捕获所有异常。我的程序启动如下,由服务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
有只小跳蛙
TA贡献1824条经验 获得超8个赞
一个简单的except Exception:
将在同一线程中捕获除 KeyboardInterrupt 和 SystemExit 之外的所有异常。
您必须try: except ...:
在线程中运行的代码中包含块以捕获线程中发生的异常。
添加回答
举报
0/150
提交
取消