Начинающие разработчики часто встречают такой код в условных операторах:
if value:
print("Значение существует!")
Сначала может быть трудно понять, что именно проверяет такая простая конструкция if value:.
Особенно вот эти два:
None""(пустая строка)
Оба они оцениваются как False, поэтому может показаться, что они равны.
Но так ли это на самом деле?
Значения, оцениваемые как Falsy
В Python следующие значения оцениваются как False в условных операторах:
NoneFalse0,0.0""(пустая строка)[](пустой список){}(пустой словарь)set(),()и другие пустые коллекции
Итак, if not value: охватывает все эти случаи.
None и "" различаются
Они выглядят по-разному и ведут себя по-разному.
value1 = None
value2 = ""
print(value1 == value2) # False
print(value1 is value2) # False
print(bool(value1)) # False
print(bool(value2)) # False
==— это сравнение значений, аis— сравнение идентичности.None— это специальный объект, означающий «значения нет»,""— это строка, но пустая.

На изображении видно, что мужчина слева держит облачко речи, но ничего не говорит — это соответствует пустой строке "".
Женщина справа даже не имеет облачка — это None.
Оба они оцениваются как False в следующих условиях:
male_voice = ""
female_voice = None
if not male_voice and not female_voice:
print("Ничего не говорит!") # оба False, выполняется
Как же различать их на практике?
Например, взглянем на обработку пользовательского ввода:
username = user_input.get("username", None)
- Если пользователь ничего не ввёл →
None - Если пользователь ввёл пустую строку →
""
Хотите обработать их по-разному?
if username is None:
print("Ввод отсутствует!")
elif username == "":
print("Введена пустая строка.")
else:
print("Введённое значение:", username)
Распространённые ошибки в практической работе
Следующий код иногда случайно фильтрует все Falsy значения:
if not username:
print("Нет ввода")
Но это условие включает не только пустую строку, но и None, 0, пустой список и другие.
Поэтому важно чётко определить намерение:
- Если значение пустое, но оно должно быть строкой →
if username is None: - Если строка должна существовать, но быть пустой →
if username != "": - Просто ничего не должно быть →
if not username:
В заключение
None и "" не равны. Но оба ведут себя как False.
Зная эту разницу, вы сможете добиться большей ясности и уменьшить количество ошибок в вашем коде.
В следующем посте мы подробнее рассмотрим такие другие значения, как 0, [], {} и разницу между is и ==!
Комментариев нет.