Сообщить об ошибке.

Поддержка в configparser методов словарей Python

Парсер конфигурации и методы словарей Python

Протокол доступа к словарям Python - это функциональность, которая позволяет использовать пользовательские объекты, как если бы они были словарями. В случае configparser реализация интерфейса отображения использует нотацию анализатора parser['section']['option'].

В частности, parser['section'] возвращает для данных раздела в парсере. Это означает, что значения не копируются, а извлекаются из исходного анализатора по запросу. Еще более важно то, что когда значения изменяются в прокси раздела, они фактически видоизменяются в исходном парсере.

Объекты модуля configparser ведут себя как можно ближе к реальным словарям. Однако есть несколько различий, которые следует учитывать:

  • По умолчанию все ключи key в разделах [section] доступны без учета регистра. Например для секции в парсере ['section'] выдает только имена ключей секции, заданные configparser.optionxform(). Это означает, что ключи в нижнем регистре по умолчанию. В то же время для раздела, содержащего ключ a, оба выражения возвращают True:

    >>> "a" in parser["section"]
    # True
    >>> "A" in parser["section"]
    # True
    
  • Все разделы также включают значения DEFAULTSECT, это означает, что метод parser.clear() не может оставить раздел пустым. Это происходит потому, что значения по умолчанию не могут быть удалены из раздела, потому что технически их там нет. Если они переопределены, удаление приводит к тому, что значение по умолчанию снова становится видимым. Попытка удалить значение по умолчанию вызывает исключение KeyError.

  • DEFAULTSECT не может быть удален из анализатора:

  • parser.get(section, option, ** kwargs) - второй аргумент не является запасным значением. Однако обратите внимание, что методы parser.get() уровня раздела совместимы как с протоколом словаря, так и с классическим API-интерфейсом модуля configparser.

  • parser.items() совместим с протоколом словаря dict, возвращает список пар кортежей (section_name, section_proxy), включая DEFAULTSECT. Однако этот метод также можно вызывать с аргументами: parser.items(section, raw, vars). Последний вызов возвращает список параметров, пар значений для указанного раздела со всеми интерполяциями, если не указано raw=True.

Протокол словаря dict Python реализован поверх существующего устаревшего API, так что подклассы, переопределяющие исходный интерфейс, должны по-прежнему работать в соответствии с ожиданиями.