ConfigWriter 抛出 configparser.NoSectionError
我想写一个配置写入器,把字典里的数据写入一个配置文件。
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])