Обработка 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.


