我试图在实例化configparser.ConfigParser
的实例上设置默认值。
在检查实例时,我发现了方法ConfigParser.setdefault()
:
Help on method setdefault in module collections.abc:
setdefault(key, default=None) method of configparser.ConfigParser instance
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
尽管这根本不是很有帮助,但是official documentation甚至没有提到此 public 方法。
所以我开始尝试一下:
>>> cp.setdefault('asd', 'foo')
<Section: asd>
>>> cp['asd']
<Section: asd>
>>> cp['asd']['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/configparser.py", line 1233, in __getitem__
raise KeyError(key)
KeyError: 'foo'
>>> cp['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/configparser.py", line 959, in __getitem__
raise KeyError(key)
KeyError: 'foo'
>>> cp.setdefault('asd', {'foo': 'bar'})
<Section: asd>
>>> cp['asd']
<Section: asd>
>>> cp['asd']['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/configparser.py", line 1233, in __getitem__
raise KeyError(key)
KeyError: 'foo'
>>> cp['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/configparser.py", line 959, in __getitem__
raise KeyError(key)
KeyError: 'foo'
>>>
但是我不知道如何使用值为'asd'
的默认键'foo'
初始化默认节'bar'
。
所以我的问题是:
ConfigParser.setdefault()
的方法是什么?ConfigParser
实例初始化后如何设置默认值? 更新
经过进一步调查,结果发现ConfigParser.setdefault()
是从_collections_abc.MutableMapping
继承的。
答案 0 :(得分:1)
ConfigParser.setdefault
与设置ConfigParser的默认设置无关。如果要设置默认值,请使用DEFAULT
部分,该部分为其他部分提供默认值:
cp['DEFAULT']['key'] = 'value'
或者如果您配置了其他default_section
,请使用您配置的任何内容。
如docs中所述,
configparser对象的行为尽可能接近实际的字典。映射接口是完整的,并且遵循MutableMapping ABC。但是,应该考虑一些差异:
[差异列表,都不涉及
setdefault
]
setdefault
是MutableMapping指定的操作之一。如果没有cp.setdefault('asd', 'foo')
的条目,则cp['asd'] = 'foo'
尝试设置cp['asd']
,然后返回cp['asd']
。
在ConfigParser中,cp['asd']
的条目将是'asd'
部分,并且设置cp['asd'] = 'foo'
是不合法的。将cp['asd']
设置为映射是合法的,但是您已经有一个cp['asd']
部分,因此您的cp.setdefault('asd', {'foo': 'bar'})
调用也没有执行任何操作。