Как прочитать и проверить INI-настройки через configparser в Python

Как прочитать и проверить INI-настройки через configparser в Python
Содержание статьи

Строка enabled = false в INI ещё не является логическим значением Python. Если передать её в bool(), получится True: строка непустая. На Mentoring.digital разберём чтение настроек, которое проверяет типы и обязательные поля до запуска основной задачи.

Сначала задайте договорённость о настройках

Пусть учебный экспорт требует секцию export, непустую папку назначения и положительный размер порции. Флаг сжатия необязателен. Такой договор полезно записать до кода: отсутствие обязательной папки и отсутствие необязательного флага требуют разного поведения.

[export]
output = reports
batch_size = 100
compressed = false

Значения INI хранятся как строки. Парсер умеет преобразовывать их через getint(), getfloat() и getboolean(), но не знает допустимые ограничения вашего приложения. Положительность размера порции всё равно проверяет программа.

Загрузите файл и проверьте значения

Следующий вариант рассчитан на обязательный файл settings.ini рядом с программой. Открытие через open() явно сообщает об отсутствии файла. Метод read() удобен для необязательных файлов: он пропускает те, которые не удалось открыть, и возвращает список успешно прочитанных.

from pathlib import Path
import configparser

path = Path(__file__).with_name("settings.ini")
config = configparser.ConfigParser(interpolation=None)
with path.open(encoding="utf-8") as stream:
    config.read_file(stream)

if not config.has_section("export"):
    raise ValueError("Missing [export] section")

section = config["export"]
output = section.get("output", "").strip()
batch_size = config.getint("export", "batch_size")
compressed = section.getboolean("compressed", fallback=False)
if not output or batch_size <= 0:
    raise ValueError("Invalid export settings")

print(output, batch_size, compressed)

Для указанного файла вывод будет reports 100 False. Относительная строка reports здесь только прочитана: папка не создаётся. Если позже превратить её в Path(output), отдельно определите базу относительного пути, чтобы результат не зависел случайно от рабочей папки запуска.

Не скрывайте неверное значение запасным

fallback=False применяется при отсутствии опции. Он не превращает compressed = perhaps в корректный флаг: преобразование завершится ValueError. Так же значение batch_size = many нельзя исправить одним запасным числом. Ошибку конфигурации лучше показать с названием параметра, не печатая весь файл.

В примере интерполяция отключена, поэтому символ % читается буквально. При стандартной интерполяции он имеет специальное значение. Также учтите: значения из секции DEFAULT имеют приоритет над fallback. Не храните в общедоступном примере реальные секреты.

Проверьте договорённость перед подключением к задаче

Изменяйте по одному условию: уберите файл, секцию и обязательный параметр; задайте ноль, текст вместо числа и неверный флаг. Затем верните корректную конфигурацию. Критерий готовности прост: каждый некорректный вариант останавливается до экспорта, корректный даёт ожидаемые значения.

Разобраться с файлами, типами и обработкой исключений можно на практических занятиях по Python. Если настройки уже используются в вашем скрипте, наставнику по Python стоит показать обезличенный INI и точный способ запуска.

Похожие статьи по данной теме