Обработка None в Python: возврат значения по умолчанию
Быстрый ответ
Хотите избежать ошибок из-за None
? В Python оператор or
даст возможность автоматически заменить None
на значение по умолчанию.
safety_net = variable or default_value
То есть если variable
равна None
или булевому False
, safety_net
сразу примет значение default_value
.
Это решение отлично подходит для многих ситуаций, но имейте в виду, что любое ложное значение приведёт к использованию default_value
, не только None
. Это важно!
Когда нужно отличить None от других ложных значений
Если требуется строго отделить None
от других ложных значений, можно использовать тернарный условный оператор.
safety_net = variable if variable is not None else default_value
Такой подход будет работать непревзойдённо в случаях, когда None
нужно отделить от других "ложных тревог".
Упоминая None, не забудем про базы данных
Если работы тесно связаны с операциями над базами данных, настройкой конфигураций или вековечной борьбой со сроками и дедлайнами, None
— это то, от чего вы захотите избавиться. Это прекрасный случай для использования оператора or
.
# Обработка None быстрой, как первый глоток утреннего кофе
database_field = db_value or default_value
Нюансы работы с None
Дело в порядке!
Оператор or
в Python проверяет выражения слева направо и принимает первое "истинное" значение:
- `None or default` => default
- `0 or default` => default
- `False or default` => default
- `'a' or default` => 'a'
Из этого следует: порядок операндов в операторе or
имеет значение, поэтому вы должны следить за ним!
Тернарный оператор как меч праведника
Нужно подставить значение по умолчанию только там, где находится None
? Тернарный оператор к вашим услугам! Он "отсеивает" None
с точностью хирургического инструмента, сохраняя при этом другие ложные значения.
Визуализация
Представим автобус:
🚌 Автобус до: [👩, None, 👨, None]
Мы – контролёр, и наша задача — заполнить вакантные места (None
) значением по умолчанию (🎁
):
seat = passenger or '🎁' # Подарим свободное место, почему бы и нет?
Вуаля:
🚌 Автобус после: [👩, 🎁, 👨, 🎁]
Пассажиры удовлетворены, ко всему прочему, мы тоже!
Замечания для рефлексии
or
— это не устрица 🦪
В Python отсутствуют аналоги оператора сравнения с null ??
, как в C#, поэтому помните, что or
не разделяет None
и остальные ложные значения.
Исключения в маскараде
Применение or
может скрыть исключения под видом значений по умолчанию. Если вам нужно отделить None
как особый случай и вызывать исключение, вам стоит выбрать тернарный оператор.
Полезные материалы
- PEP 505 – Операторы обработки None — предложенный синтаксис для работы со значениями
None
в Python. - 6. Expressions — Документация Python 3.12.2 — всё про условные выражения, включая тернарные операторы в Python.
- Python idiom to return first item or None – Stack Overflow — обсуждение способов возврата значений по умолчанию, когда переменная равна
None
. - Использование логического оператора "or" в Python – Real Python — углубленное руководство по использованию оператора
or
в Python. - Есть ли в Python аналог оператора объединения с null из C#? – Stack Overflow — исследование и обсуждение возможных аналогов оператора объединения с null из C# в Python.
- Тернарный оператор в Python – GeeksforGeeks — всё об использовании тернарного оператора в Python, включая применение для работы со значениями по умолчанию.
- Метод get() словаря Python — полезное руководство по применению метода
get()
для работы с значениями None в словарях Python.