Dav*_*ave 5 python exception configparser python-2.7
我有一个配置文件,其中定义了一些选项。有时,如果找不到请求的选项,我想忽略错误并返回None。
setting.cfg:
[Set]
ip=some_ip
verify=yes #if verify does not exist here --> verify=None
Run Code Online (Sandbox Code Playgroud)
test.py:
import sys
import ConfigParser
file="setting.cfg"
class ReadFile:
def read_cfg_file(self):
configParser = ConfigParser.RawConfigParser(allow_no_value=True)
if os.path.isfile(file):
configParser.read(file)
else:
sys.exit(1)
try:
verify = configParser.get('Set', 'verify')
except ConfigParser.NoOptionError:
pass
return verify,and,lots,of,other,values
Run Code Online (Sandbox Code Playgroud)
如果我这样处理它,我将无法返回值,因为如果'verify'找不到该选项,它就会简单地传递。
如果找不到选项,有什么方法可以忽略错误,而是返回None?
例如,这样的事情:
verify = configParser.get('Set', 'verify')
if not verify:
verify=False
Run Code Online (Sandbox Code Playgroud)
Python 3的configparser模块得到了很大的改进并提供了一种get(option, default)方法。
Python 2ConfigParser允许有一个DEFAULT部分(在构建时提供),尽管在这种情况下您必须提前知道每个选项的默认值。
如果您使用 Python 2 并且需要在调用站点提供默认值,那么根据 Rob 的答案进行子类化似乎是可行的方法。
如果是我,我会从 派生一个新的配置解析器类RawConfigParser,仅添加新的特殊行为,如下所示:
from ConfigParser import RawConfigParser, NoOptionError
from StringIO import StringIO
from collections import defaultdict
class MyConfigParser(RawConfigParser):
def get(self, section, option):
try:
return RawConfigParser.get(self, section, option)
except NoOptionError:
return None
settings=StringIO('''
[Set]
ip=192.0.2.76
verify=yes
[Set2]
ip=192.0.2.74
''')
cfg=MyConfigParser(allow_no_value=True)
cfg.readfp(settings)
assert cfg.get('Set', 'verify') == 'yes'
assert cfg.get('Set2', 'verify') == None
Run Code Online (Sandbox Code Playgroud)