2016-03-04 3 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