在 Python 中记录未捕获的异常
当 Python 程序中发生异常且未在当前执行块内处理时,会自动打印到标准错误(stderr)。这种行为可能很不方便,特别是当您想要捕获所有异常以进行日志记录或调试目的时。
要解决此问题,您可以配置日志记录模块以自动输出未捕获的异常。这是一个利用logging.exception()函数的解决方案:
<code class="python">try: raise Exception('Throwing a boring exception') except Exception as e: logging.exception(e)</code>
这种方法很有效,但需要显式处理和记录每个异常。对于更自动化的解决方案,您可以重写 Python 的 sys.excepthook 函数,该函数负责处理未捕获的异常。
下面是完整日志记录配置的示例,其中包括其他功能,例如:
<code class="python">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")</code>
完成此配置后,日志模块将自动记录所有未捕获的异常。
以上是如何在 Python 中记录未捕获的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!