如何在 Python 中记录未捕获的异常?

DDD
发布: 2024-10-22 23:54:29
原创
842 人浏览过

How to Log Uncaught Exceptions in Python?

在 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 函数,该函数负责处理未捕获的异常。

下面是完整日志记录配置的示例,其中包括其他功能,例如:

  • 忽略键盘中断 (Ctrl C) 事件以允许程序正常退出
  • 利用日志记录模块的格式化功能进行异常报告
  • 将未处理的异常输出到 stdout 而不是 stderr
<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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!