ConfigWriter 抛出 configparser.NoSectionError

1 投票
2 回答
578 浏览
提问于 2025-04-18 09:34

我想写一个配置写入器,把字典里的数据写入一个配置文件。

jobstore = {
    'DEFAULT': [
        'foo',
        'bar'
    ],
    'DEFAULT2': [
        'foo',
        'bar'
    ]

}
with open('./config2.txt', 'w') as f:
    conf = ConfigParser()
    for job in jobstore.keys():
        conf.set(job, 'module', jobstore[job][0])
        conf.set(job, 'action', jobstore[job][1])
    conf.write(f)

但是如果我尝试执行这个,就会出现

  File "C:\Python34\lib\configparser.py", line 879, in set
    raise NoSectionError(section)
configparser.NoSectionError: No section: 'DEFAULT2'

不过如果字典里只有一个条目,它就能正常工作。我到底哪里出错了呢?

2 个回答

0

在你尝试给DEFAULT2添加选项之前,首先需要创建这个部分。DEFAULT是在初始化ConfigParser对象时自动创建的。

for job, (module, action) in jobstore.items():
    if job != 'DEFAULT':
        conf.add_section(job)
    conf.set(job, 'module', module)
    conf.set(job, 'action', action)
0

configparser.ConfigParser的构造函数可以在这个链接找到:https://docs.python.org/3/library/configparser.html#configparser-objects

class configparser.ConfigParser(defaults=None, dict_type=collections.OrderedDict,
                                allow_no_value=False, delimiters=('=', ':'), 
                                comment_prefixes=('#', ';'), inline_comment_prefixes=None,
                                strict=True, empty_lines_in_values=True,
                                **default_section=configparser.DEFAULTSECT**, 
                                interpolation=BasicInterpolation())

它可以使用“DEFAULT”这个键,因为它有一个叫做default_section的参数,这个参数会创建一个名为“DEFAULT”的默认部分。你可以通过下面的方式来验证这一点:

>>> import configparser
>>> configparser.DEFAULTSECT
'DEFAULT'

所以你需要手动创建一个叫“DEFAULT2”的新部分。

如果你想确保不会出现这样的错误,并且你信任这些数据,你可以这样做:

for job in jobstore.keys():
    if not conf.has_section(job):
        conf.add_section(job)
    conf.set(job, 'module', jobstore[job][0])
    conf.set(job, 'action', jobstore[job][1])

撰写回答