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

configparser读取含%(message)s的配置值失败,求正确读取使用方法

解决configparser读取%(message)s时的InterpolationMissingOptionError错误

问题原因

Python的configparser默认启用基础插值(BasicInterpolation),会把%(xxx)s格式的字符串当成对配置文件中其他选项的引用。当读取LOGS_FORMATTER: %(message)s时,它会尝试寻找名为message的配置选项,找不到就抛出InterpolationMissingOptionError。

三种可行解决方案

1. 初始化ConfigParser时禁用插值

创建ConfigParser实例时,显式设置interpolation=None,彻底关闭插值功能:

reloaded_config = configparser.ConfigParser(interpolation=None)

2. 使用RawConfigParser替代ConfigParser

RawConfigParser是ConfigParser的父类,默认不做任何插值处理,适合不需要引用其他配置项的场景:

reloaded_config = configparser.RawConfigParser()

3. 转义百分号(写入配置时处理)

如果需要保留默认插值功能,只是要让%(message)s被原样读取,可以在写入配置时把百分号转义为%%,读取后会自动还原成单个%:
修改写入配置的代码片段:

config['APP'] = {
    # ...其他配置项
    'LOGS_FORMATTER': '%%(message)s',
    # ...其他配置项
}

修改后的完整代码示例(以禁用插值为例)

import configparser
config = configparser.ConfigParser()

config['APP'] = {
    'CERTS_PATH': './certs/',
    'DATA_PATH': './data/',
    'LOGS_PATH': './logs/',
    'LOGS_FORMATTER': '%(message)s',
    'LOCAL_ISSUES_FILE_SUFFIX': 'issues.json',
    'MAX_RESULTS': '100',
}

with open('config.ini', 'w') as configfile:
    config.write(configfile)

# 关键修改:禁用插值
reloaded_config = configparser.ConfigParser(interpolation=None)
reloaded_config.read('config.ini')

for _section in reloaded_config.sections():
    print(f"[{_section}]")
    for _key in reloaded_config[_section]:
        _value = reloaded_config[_section][_key]
        print(f"{_key} = {_value}")

运行这段代码后,就能正常读取%(message)s并输出,不会再抛出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:53:13