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

在Python中记录未捕获的异常

在Python中记录未捕获的异常

隔江千里 2019-12-09 14:27:16
您如何导致未捕获的异常通过logging模块而不是通过模块输出stderr?我知道最好的方法是:try:    raise Exception, 'Throwing a boring exception'except Exception, e:    logging.exception(e)但是我的情况是,如果在没有捕获到异常的情况下自动调用它,那将非常好logging.exception(...)。
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这是一个完整的小示例,其中还包括其他一些技巧:


import sys

import logging

logger = logging.getLogger(__name__)

handler = logging.StreamHandler(stream=sys.stdout)

logger.addHandler(handler)


def handle_exception(exc_type, exc_value, exc_traceback):

    if issubclass(exc_type, KeyboardInterrupt):

        sys.__excepthook__(exc_type, exc_value, exc_traceback)

        return


    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))


sys.excepthook = handle_exception


if __name__ == "__main__":

    raise RuntimeError("Test unhandled")

忽略KeyboardInterrupt,以便控制台python程序可以使用Ctrl + C退出。


完全依靠python的日志记录模块来格式化异常。


将自定义记录器与示例处理程序一起使用。这将未处理的异常更改为转到stdout而不是stderr,但是您可以将具有相同样式的各种处理程序添加到logger对象。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 617 浏览
慕课专栏
更多

添加回答

举报

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