如果我尝试写一个尚不存在的部分,则会得到一个configparser.NoSectionError
:
from conf
igparser import ConfigParser
c = ConfigParser()
c['a'] = {'x': 1}
c['a']['y'] = '2'
c.set(section='a', option='z', value='3')
for i in c:
print(f'Section {i}:')
for j in c[i]:
print(f'\t{j}: {c[i][j]}')
# KeyError
c['b']['u'] = '0'
# NoSectionError
c.set('b', 'u', '0')
真的没有办法要求ConfigParser
设置值,并创建一个不存在的节吗?检查某个节是否存在,并每次创建它似乎都是一个乏味的设计。
答案 0 :(得分:0)
这不能直接完成。但是,存在基于ConfigParser对象的read_dict
方法的权衡。想法是定义一个仅包含节名称的假字典,每个节名称都与一个空字典相关联。这是您以前的代码中插入的技巧:
from configparser import ConfigParser
c = ConfigParser()
c.read_dict({'a':{},'b':{},'c':{}})
c['a']['x'] = '1'
c['a']['y'] = '2'
c.set(section='a', option='z', value='3')
c['b']['u'] = '0'
c.set('c', 'v', '0')
for i in c:
print(f'Section {i}:')
for j in c[i]:
print(f'\t{j}: {c[i][j]}')
您会看到:没有更多错误,也不需要为每个新的部分名称使用add_section()
。
但是,当然,您可以定义比假字典更有用的内容。例如,上面给出的整个配置结构可以用一行创建:
c.read_dict(dict(a=dict(x=1, y=2, z=3), b=dict(u=0), c=dict(v=0)))
或使用其他语法:
c.read_dict({'a':{'x':1, 'y':2, 'z':3}, 'b':{'u':0}, 'c':{'v':0}})