除非显式处理,否则 Python 异常默认会输出到程序的标准错误流 (stderr)。但是,在某些情况下,可能需要使用日志记录模块来记录未捕获的异常。
记录未捕获异常的传统方法是在 except 块中手动使用logging.exception(e) 方法,如下所示:
<code class="python">try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e)</code>
但是,为每个未捕获的异常自动调用logging.exception(...) 消除了手动步骤。
考虑以下代码片段:
<code class="python">import sys import logging # Custom logger with handler for stdout logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) # Custom exception handler to log uncaught exceptions def handle_exception(exc_type, exc_value, exc_traceback): # Ignore KeyboardInterrupt for Ctrl + C exit 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)) # Assign custom exception handler sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
此修改后的脚本完成了几个关键任务:
通过使用 handle_exception 覆盖默认异常处理程序,将使用配置的记录器自动记录未捕获的异常,从而增强可见性并促进调试。
以上是如何使用日志模块记录 Python 中未处理的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!