2016-03-04 17 views
0

我有一个定义了一些选项的配置文件。有时候,如果没有找到请求的选项,我想忽略错误并返回None如何使ConfigParser返回一个默认值而不是引发NoOptionError?

setting.cfg

[Set] 
ip=some_ip 
verify=yes  #if verify does not exist here --> verify=None 

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 

如果我处理一下这个样子,我不能返回值,如果'verify'选项没有发现,因为它只是简单地传递。

有没有什么办法可以忽略错误,如果找不到选项,而是返回None

例如,这样的事情:

verify = configParser.get('Set', 'verify') 
if not verify: 
    verify=False 

回答

0

如果是我,我会得到一个新的配置解析类从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 
相关问题