Как установить значение по умолчанию, если элемент не найден при разборе конфигурации

#python-3.x

#python-3.x

Вопрос:

Я разбираю файл config.ini с помощью python ConfigParser, но если в моем файле конфигурации нет определенного элемента, то возникает ошибка. Я хочу установить проверку, чтобы при попытке получить значение, которого нет в файле конфигурации, оно должно возвращать None.

Ниже приведен класс анализатора конфигурации, который я написал.

 from configparser import ConfigParser

class MyConfiguration(object):
    def __init__(self, *file_names):
        # print(file_names)
        parser = ConfigParser()
        # parser.optionxform = str  
        found = parser.read(file_names)
        if not found:
            raise ValueError('No config file found!')
        for section in parser.sections():
            # print(section)
            # print(parser.items(section))
            self.__dict__.update(parser.items(section))  
  

config = MyConfiguration(FILE1, FILE2)

чтобы использовать любой элемент из конфигурационного файла, я вызываю config.key

Ожидание: если я попытаюсь получить config.key_unknown то, что недоступно, оно должно вернуть None

Ответ №1:

Вместо установки ключей в словаре, вам, вероятно, следует использовать __getattr__ :

 from configparser import ConfigParser

class MyConfiguration(object):
    def __init__(self, *file_names):
        # print(file_names)
        parser = ConfigParser()
        # parser.optionxform = str  
        found = parser.read(file_names)
        if not found:
            raise ValueError('No config file found!')
        self._parser = parser

    def __getattr__(self, key):
        for section in self._parser.sections():
            if key in section:
                return section[key]
        return None
  

Комментарии:

1. и как получить значения, используя class object?

2. потому что, если я все еще пытаюсь config._parser.get(«атрибуты», «key_unknown»), он все равно выдает ошибку configparser. Ошибка NoOptionError: нет опции ‘key_unknown’ в разделе: ‘атрибуты

3. @Arun Просто сделай config.key_unknown .

4. он возвращает None даже для ключей, присутствующих в файле конфигурации

5. @Arun Ах. На самом деле это удивительно. Я думаю, это чувствительно к регистру; вы это проверили?