Как "проверить" NoneType в python?
У меня есть метод, который иногда возвращает значение NoneType. Итак, как я могу опросить переменную, которая является NoneType? Мне нужно использовать метод , если, например
if not new:
new = '#'
Я знаю, что это неверный путь, и я надеюсь, что вы понимаете, что я имел в виду.
Ответы
Ответ 1
Итак, как я могу опросить переменную, которая является NoneType?
Используйте оператор is
, например
if variable is None:
Почему это работает?
Так как None
является единственным одноэлементным объектом NoneType
в Python, мы можем использовать is
, чтобы проверить, имеет ли в нем переменную None
.
Цитата из is
docs,
Операторы is
и is not
проверяют идентичность объекта: x is y
является истинным тогда и только тогда, когда x
и y
являются одним и тем же объектом. x is not y
дает значение обратной истины.
Поскольку может быть только один экземпляр None
, is
будет предпочтительным способом проверки None
.
Услышьте его от рта лошади
Цитата Руководство по стилю кодирования Python - PEP-008 (совместно определено самим Гвидо),
Сравнение с синглонами типа None
всегда должно выполняться с помощью is
или is not
, никогда операторов равенства.
Ответ 2
if variable is None:
...
if variable is not None:
...
Ответ 3
Это также можно сделать с помощью isinstance
в соответствии с isinstance
Алекса Холла:
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
также интуитивно понятен, но есть осложнение, которое требует линии
NoneType = type(None)
который не нужен для таких типов, как int
и float
.
Ответ 4
Как указано в комментарии Аарона Холла:
Поскольку вы не можете создать подкласс NoneType
и None
является одноэлементным, isinstance
не должен использоваться для обнаружения None
- вместо этого вы должны делать, как говорится в принятом ответе, и использовать is None
или is not None
.
Оригинальный ответ:
Однако проще всего без дополнительной строки в дополнение к ответу кардамона :
isinstance(x, type(None))
Так, как я могу подвергнуть сомнению переменную, которая является NoneType? Мне нужно использовать, если метод
Использование isinstance()
не требует is
в if
-statement:
if isinstance(x, type(None)):
#do stuff
Дополнительная информация
Вы также можете проверить наличие нескольких типов в одном операторе isinstance()
, как указано в документации. Просто напишите типы в виде кортежа.
isinstance(x, (type(None), bytes))
Ответ 5
Не уверен, что это отвечает на вопрос. Но я знаю, что мне понадобилось время, чтобы понять. Я просматривал веб-сайт, и вдруг имена авторов уже не было. Так что нужно проверить выражение.
if type(author) == type(None):
my if body
else:
my else body
Author может быть любой переменной в этом случае, и None
может быть любым типом, который вы проверяете.
Ответ 6
Python 2.7:
x = None
isinstance(x, type(None))
или же
isinstance(None, type(None))
==> Правда
Ответ 7
Надеюсь этот пример будет вам полезен)
print(type(None) # NoneType
Итак, вы можете проверить тип имени переменной
#Example
name = 12 # name = None
if type(name) != type(None):
print(name)
else:
print("Can't find name")