В настройке написано false, а Python включает режим. Разбираем четыре значения
Скрипт получает настройку как текст. В ней написано false. Кажется естественным вызвать bool(value) и получить выключенный режим. Но для непустой строки результат будет True — даже если внутри написано false или 0.
Это учебный разбор с помощью ИИ. Он не меняет настройки приложения; все примеры выполняются с локальными переменными.
for value in ('false', '0', '', False):
print(repr(value), '->', bool(value))
Результат:
'false' -> True
'0' -> True
'' -> False
False -> False
Кавычки здесь существенны. 'false' — строка, False — логическое значение. В правилах проверки истинности Python: https://docs.python.org/3/library/stdtypes.html#truth-value-... пустая строка относится к ложным значениям. Непустая строка истинна; её содержимое bool не переводит.
Для текстового формата нужен разбор допустимых слов. В этом примере разрешим только true/false, любой регистр и пробелы по краям. Неизвестное слово не будем молча превращать в выключенный режим.
def parse_flag(value):
if not isinstance(value, str):
raise TypeError('Ожидается строка')
allowed = {'true': True, 'false': False}
normalized = value.strip().lower()
if normalized not in allowed:
raise ValueError('Допустимы только true и false')
return allowed[normalized]
for value in (' FALSE ', 'true', 'flase', '', None):
try:
print(repr(value), '->', parse_flag(value))
except (TypeError, ValueError) as error:
print(repr(value), '->', type(error).__name__)
Получим:
' FALSE ' -> False
'true' -> True
'flase' -> ValueError
'' -> ValueError
None -> TypeError
Опечатка flase теперь видна сразу. Конструкция value == 'true' тоже выключила бы её, но тогда невозможно отличить неверное слово от корректного false.
Это не универсальный формат конфигурации. Если источник принимает yes/no или 1/0, добавлять нужно именно документированные варианты. Если он уже возвращает логический объект, повторно переводить его в строку ради этой функции не нужно.
Отсутствующее поле — ещё один отдельный случай. Для него можно заранее выбрать значение по умолчанию. Однако применять этот выбор к любому нераспознанному слову опасно для предсказуемости: опечатка начнёт управлять режимом так же, как сознательный выбор пользователя.
Проверку стоит делать на границе ввода. Дальше по программе передаётся уже True или False, а не строка, смысл которой каждый участок кода толкует заново.
Выучишь хоть один нормальный язык, и узнаешь, что строки — это боль. И они тебе в коде вообще не нужны для работы, их максимум — это ошибку в логи записать. Учись работать с целыми числами.