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

从JSON读取logging.INFO日志级别被识别为字符串的解决求助

日志级别字符串传入logger.setLevel()报错问题

问题详情

JSON配置文件中日志级别字段如下:

{
  "loglevel":"logging.INFO"
}

运行以下代码时抛出错误:

ValueError: Unknown level: 'logging.INFO'

相关代码:

import logging
import json

with open("export_tool_config.json", "r") as f:
    data_load=json.load(f)

log_level = data_load['loglevel']

logger = logging.getLogger(__name__)
logger.setLevel(log_level)

问题核心是logger.setLevel()需要接收logging模块的级别常量(如logging.INFO),而非字符串格式的'logging.INFO'。

解决方法

方法1:解析字符串获取对应常量

通过拆分字符串提取级别名称,再用getattr从logging模块中获取对应常量:

import logging
import json

with open("export_tool_config.json", "r") as f:
    data_load = json.load(f)

log_level_str = data_load['loglevel']
# 拆分字符串,提取级别名称部分
_, level_name = log_level_str.split('.')
log_level = getattr(logging, level_name)

logger = logging.getLogger(__name__)
logger.setLevel(log_level)

方法2:修改JSON配置为纯级别名称

将JSON中的日志级别改为纯级别标识(如"INFO"),再直接映射到常量:
修改后的JSON:

{
  "loglevel": "INFO"
}

对应代码:

import logging
import json

with open("export_tool_config.json", "r") as f:
    data_load = json.load(f)

log_level = getattr(logging, data_load['loglevel'])

logger = logging.getLogger(__name__)
logger.setLevel(log_level)

方法3:用字典映射固定级别

如果不想修改JSON配置,可提前建立字符串到常量的映射字典:

import logging
import json

level_mapping = {
    "logging.INFO": logging.INFO,
    "logging.DEBUG": logging.DEBUG,
    "logging.WARNING": logging.WARNING,
    "logging.ERROR": logging.ERROR,
    "logging.CRITICAL": logging.CRITICAL
}

with open("export_tool_config.json", "r") as f:
    data_load = json.load(f)

log_level = level_mapping[data_load['loglevel']]

logger = logging.getLogger(__name__)
logger.setLevel(log_level)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:22:15