<p>configparser 默认仅识别行首的 # 或 ; 注释,行内注释需显式启用 inline_comment_prefixes 参数,且注释内容读取后即丢弃不可访问。</p>

直接说结论:configparser 默认就能解析带注释的 INI 文件,但注释必须符合规范(以 # 或 ; 开头且不在值内),否则会报错或被吞掉。
注释写法必须严格满足 configparser 的识别规则
它只把行首(忽略空白后)是 # 或 ; 的整行当注释;如果注释出现在键值对后面(比如 port = 8080 # 开发端口),默认会被当成值的一部分——除非启用 inline_comment_prefixes。
- ✅ 正确:空行、
# 这是注释、; 也是注释 - ❌ 错误:
host = localhost # 注释(默认不识别,host的值变成"localhost # 注释") - ⚠️ 注意:Windows 风格的
REM不被支持,写了就报错
启用行内注释需显式配置 parser 实例
想让 # 和 ; 在值后面也生效,得在初始化时传参,不能靠 read() 后补:
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
from configparser import ConfigParser
<h1>必须在实例化时指定,之后无法修改</h1><p>parser = ConfigParser(
inline_comment_prefixes=('#', ';'),
comment_prefixes=('#', ';'), # 显式重申,避免继承默认值干扰
interpolation=None # 可选:禁用插值,避免 % 符号引发意外
)
parser.read("config.ini")
- 漏掉
comment_prefixes可能导致某些版本下inline_comment_prefixes不生效 -
interpolation=None推荐加上,否则遇到path = /home/%(user)s这类会触发InterpolationMissingOptionError
读取后注释内容不可访问,仅用于跳过解析
configparser 是纯解析器,不是配置文件编辑器。所有注释在 read() 过程中被丢弃,不会存进 sections()、items() 或任何属性里。
立即学习“Python免费学习笔记(深入)”;
- 无法通过 API 获取某行是不是注释、注释内容是什么
- 如果需要保留注释(比如做配置管理工具),得换用
configobj或手写解析器 - 常见误判:以为
parser.get(...)返回值里包含注释——实际永远不包含
真正容易出问题的地方是混合了 Windows 批处理风格注释或没关插值,结果读出来值不对却找不到原因。建议第一次用时先 print(parser.items("section")) 看原始解析结果,比对着文件逐行确认注释位置。

















