В настройке написано 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, а не строка, смысл которой каждый участок кода толкует заново.

0
Автор поста оценил этот комментарий

Выучишь хоть один нормальный язык, и узнаешь, что строки — это боль. И они тебе в коде вообще не нужны для работы, их максимум — это ошибку в логи записать. Учись работать с целыми числами.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества