Обработка None в Python: возврат значения по умолчанию

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Хотите избежать ошибок из-за None? В Python оператор or даст возможность автоматически заменить None на значение по умолчанию.

Python
Скопировать код
safety_net = variable or default_value

То есть если variable равна None или булевому False, safety_net сразу примет значение default_value.

Это решение отлично подходит для многих ситуаций, но имейте в виду, что любое ложное значение приведёт к использованию default_value, не только None. Это важно!

Кинга Идем в IT: пошаговый план для смены профессии

Когда нужно отличить None от других ложных значений

Если требуется строго отделить None от других ложных значений, можно использовать тернарный условный оператор.

Python
Скопировать код
safety_net = variable if variable is not None else default_value

Такой подход будет работать непревзойдённо в случаях, когда None нужно отделить от других "ложных тревог".

Упоминая None, не забудем про базы данных

Если работы тесно связаны с операциями над базами данных, настройкой конфигураций или вековечной борьбой со сроками и дедлайнами, None — это то, от чего вы захотите избавиться. Это прекрасный случай для использования оператора or.

Python
Скопировать код
# Обработка None быстрой, как первый глоток утреннего кофе
database_field = db_value or default_value

Нюансы работы с None

Дело в порядке!

Оператор or в Python проверяет выражения слева направо и принимает первое "истинное" значение:

Markdown
Скопировать код
- `None or default`  => default
- `0 or default`     => default
- `False or default` => default
- `'a' or default`   => 'a'

Из этого следует: порядок операндов в операторе or имеет значение, поэтому вы должны следить за ним!

Тернарный оператор как меч праведника

Нужно подставить значение по умолчанию только там, где находится None? Тернарный оператор к вашим услугам! Он "отсеивает" None с точностью хирургического инструмента, сохраняя при этом другие ложные значения.

Визуализация

Представим автобус:

Markdown
Скопировать код
🚌 Автобус до: [👩, None, 👨, None]

Мы – контролёр, и наша задача — заполнить вакантные места (None) значением по умолчанию (🎁):

Python
Скопировать код
seat = passenger or '🎁'  # Подарим свободное место, почему бы и нет?

Вуаля:

Markdown
Скопировать код
🚌 Автобус после: [👩, 🎁, 👨, 🎁]

Пассажиры удовлетворены, ко всему прочему, мы тоже!

Замечания для рефлексии

or — это не устрица 🦪

В Python отсутствуют аналоги оператора сравнения с null ??, как в C#, поэтому помните, что or не разделяет None и остальные ложные значения.

Исключения в маскараде

Применение or может скрыть исключения под видом значений по умолчанию. Если вам нужно отделить None как особый случай и вызывать исключение, вам стоит выбрать тернарный оператор.

Полезные материалы

  1. PEP 505 – Операторы обработки None — предложенный синтаксис для работы со значениями None в Python.
  2. 6. Expressions — Документация Python 3.12.2 — всё про условные выражения, включая тернарные операторы в Python.
  3. Python idiom to return first item or None – Stack Overflow — обсуждение способов возврата значений по умолчанию, когда переменная равна None.
  4. Использование логического оператора "or" в Python – Real Python — углубленное руководство по использованию оператора or в Python.
  5. Есть ли в Python аналог оператора объединения с null из C#? – Stack Overflow — исследование и обсуждение возможных аналогов оператора объединения с null из C# в Python.
  6. Тернарный оператор в Python – GeeksforGeeks — всё об использовании тернарного оператора в Python, включая применение для работы со значениями по умолчанию.
  7. Метод get() словаря Python — полезное руководство по применению метода get() для работы с значениями None в словарях Python.