You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python日志无法捕获运行错误:请求排查方案

问题分析与解决方案

你的代码存在几个关键问题,导致错误信息没有被日志捕获:

1. Python 2 不支持 logging.basicConfig 的 force 参数

force=True 是 Python 3.8 才新增的参数,在 Python 2 中使用会直接抛出 TypeError,导致日志配置失败——这也是你看不到任何日志的核心原因之一,程序在配置日志阶段就出错了,但这个错误也没被记录。

2. 未被捕获的顶层异常不会自动被 logging 记录

代码里的 pprint("test") 因为没有导入 pprint 模块会触发 NameError,但默认情况下 logging 不会主动捕获这类未被 try-except 包裹的顶层异常,需要手动添加异常处理逻辑。

3. 缺少必要的模块导入

使用 pprint 前未导入该模块,本身就会触发错误,但因为前面的日志配置问题,这个错误也没被记录。


修改后的代码示例

import logging
import sys
import pprint  # 导入要使用的模块

# 清理 root handler(Python 2 中该写法有效)
for handler in logging.root.handlers[:]:
    logging.root.removeHandler(handler)

# Python 2 移除不支持的 force 参数,添加日志格式方便排查问题
logging.basicConfig(
    filename="directory/logs.txt",
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

# 全局异常钩子:捕获所有未处理的异常并写入日志
def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
    # 忽略键盘中断(Ctrl+C)
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return
    logging.critical("未捕获的异常", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception

import pandas as pd
# 其他模块导入...

# 测试代码
pprint("test")

额外说明

  • 如果需要捕获 Python 的警告信息(如 DeprecationWarning),可以添加 logging.captureWarnings(True),将警告转发到日志系统。
  • 确保 directory/logs.txt 的路径存在,否则程序会抛出文件写入错误,同样可以通过上述异常钩子捕获。

内容的提问来源于stack exchange,提问作者user2355903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:08:04