# as done in ConfigParser
try:
from collections import OrderedDict as _default_dict
except ImportError:
# fallback for setup.py which hasn't yet built _collections
_default_dict = dict
class NotifyEmptyStringValueDict(_default_dict):
def __setitem__(self, key, value):
if value == "":
# Consider raising an exception here instead, e.g. ValueError,
# unless you don't want empty string values to break the parsing
# and just want a warning message to be displayed while parsing continues
print "Option: %s has no value under section %s" % (key, self['__name__'])
# accessing self['__name__'] obviously raises a KeyError when used
# outside the context of a parser instance. In a parser, this holds
# the section name
_default_dict.__setitem__(self, key, value)
从解析器的角度来看,第
HEAD2
部分中的选项key1
没有值;一个空字符串实例,它构成了解析器的有效值:您可以将
^{pr2}$RawConfigParser
子类化并重写_read()
方法,以便在将这些空字符串值插入到内部dict中之前捕获这些空字符串值。但是,_read
相当冗长,在其中捕获不需要的值显得有点笨拙。只有在Python版本低于2.6的情况下,我才会走这条路。在这个场景中,您将在处理选项行时添加对空字符串的检查
在empty values have been handled之后。在
在Python2.6中,^{} (及其后代)接受一个可选参数
dict_type
,它允许您传入一个自定义字典类,解析器将在内部使用该类。在Python2.7中,默认值是
collections.OrderedDict
,并回退到内置的dict
。您可以创建一个自定义的
dict
类,该类以值的形式警告空字符串实例:然后用这个类将解析器实例化为
dict_type
:在Python<;2.6中,重写
RawConfigParser
子类中的_read
,在Python>;=2.6中使用自定义可变映射类型dict_type
,这两个选项的优点是在解析配置时已经执行了检查;无需再次遍历完全解析的配置。在相关问题 更多 >
编程相关推荐