Как "проверить" 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")