捕获全局异常,并且把异常信息打印到日志中
背景:工作中用到一些脚本,脚本把日志记录到文件中。新需求修改脚本后,难免引入一些异常,执行脚本会报错,但是日志文件中没有报错的详细信息,很难排查。
1、不使用sys.excepthook时,执行下面代码会抛出异常,日志文件example.log不会记录异常信息。
#coding:utf-8 import sys import logging logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG) def handle_exception(exc_type, exc_value, exc_traceback): """使用sys.excepthook捕获全局异常,并且把异常信息打印到日志中""" if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback)) #sys.excepthook = handle_exception # 全局捕获异常 a=3/0
2、使用sys.excepthook后,无论脚本哪一行代码抛出异常,日志文件example.log都会记录异常信息。
#coding:utf-8 import sys import logging logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG) def handle_exception(exc_type, exc_value, exc_traceback): """使用sys.excepthook捕获全局异常,并且把异常信息打印到日志中""" if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception # 全局捕获异常 a=3/0