为何Python configparser无法读取[DEFAULT]段?求不改INI的解决方案
问题原因与解决办法
问题原因
Python的configparser模块有原生设计规则:只有命名为[DEFAULT](大写)的段会被识别为全局默认配置段,它的作用是给其他所有自定义段提供默认配置项。为了区分默认段和用户自定义段,sections()方法的返回值会主动排除[DEFAULT],只返回你自己定义的其他段。这不是bug,是模块的既定行为。
而你测试的小写[default]段,因为不符合模块对默认段的命名要求,会被当成普通的自定义段,所以能正常出现在sections()的结果里。
无需修改INI文件的解决办法
这里给几个实用的处理方式:
- 直接访问DEFAULT段配置:不需要依赖
sections(),直接通过config['DEFAULT']就能获取该段的所有配置项,比如读取某个键值可以写config['DEFAULT'].get('your_key') - 手动生成包含DEFAULT的段列表:如果需要把DEFAULT加入到段列表里,自己拼接即可:
all_sections = ['DEFAULT'] + config.sections() - 获取所有内部存储的段:可以通过
config._sections.keys()获取模块内部存储的所有段名(包括DEFAULT),不过注意这是模块的内部属性,后续版本可能有变动,谨慎使用 - 检查DEFAULT段是否存在:用
config.has_section('DEFAULT')可以判断INI文件里是否定义了该段,哪怕INI里没写,模块也会自动创建一个空的DEFAULT段,所以这个方法一般返回True
内容的提问来源于stack exchange,提问作者ravenchaser
相关产品推荐
相关产品推荐

