python - 捕获类中的所有异常
问题描述
我想知道是否有人有想法在正在运行的线程中捕获所有异常。我的程序由服务启动如下
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 中的每个例子都是可能的,超级捕获所有异常并从那里进一步工作
解决方案
这是一个覆盖 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
推荐阅读
- javascript - 在three.js中使用透明贴图遮罩图像
- python - 为什么将值存储在变量中会对幂运算符产生影响
- python - 表示每个事件的发生(df 中的列)
- javascript - 仅在远程服务器上“超出最大更新深度”
- kubernetes - 如何在卷中的 subPathExpr 中使用 pod 主机名作为 kubernetes v1.13.0 中的部署类型
- python - 列表中子列表的条件合并
- sass - 当文件夹中的任何 SCSS 文件发生更改时,使 WebStorm 重新编译单个 SCSS 文件
- macos - Mac OS X Mojave - 永久设置环境变量
- vb.net - 如何使用 oledb 查询从 datediff 函数中获取所有值并且已导入来自 excel 文件的数据
- android - BluetoothDevice.aliasName 未解析的引用