


Строка 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 и точный способ запуска.