在Python中记录未捕获的异常

您如何导致未捕获的异常通过logging模块而不是通过模块输出stderr?


我知道最好的方法是:


try:

    raise Exception, 'Throwing a boring exception'

except Exception, e:

    logging.exception(e)

但是我的情况是,如果在没有捕获到异常的情况下自动调用它,那将非常好logging.exception(...)。


隔江千里
浏览 618回答 3
3回答

子衿沉夜

这是一个完整的小示例,其中还包括其他一些技巧:import sysimport logginglogger = 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_exceptionif __name__ == "__main__":    raise RuntimeError("Test unhandled")忽略KeyboardInterrupt,以便控制台python程序可以使用Ctrl + C退出。完全依靠python的日志记录模块来格式化异常。将自定义记录器与示例处理程序一起使用。这将未处理的异常更改为转到stdout而不是stderr,但是您可以将具有相同样式的各种处理程序添加到logger对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python