Как "проверить" NoneType в python?


У меня есть метод, который иногда возвращает значение NoneType. Итак, как я могу задать вопрос переменной, которая не является типом? Мне нужно использовать Если метод, например

if not new:
    new = '#'

Я знаю, что это неправильный путь и я надеюсь, вы понимаете, что я имел в виду.

5 239

5 ответов:

Итак, как я могу задать вопрос переменной, которая не является типом?

использовать is оператор, такой

if variable is None:

почему это работает?

С None является единственным одноэлементным объектом NoneType в Python, мы можем использовать is оператор для проверки наличия переменной None в нем или нет.

цитирую is docs,

операторы is и is not тест на идентичность объекта:x is y true если и только если x и y это один и тот же объект. x is not y дает обратное значение ИСТИНА.

так как может быть только один экземпляр None,is было бы предпочтительным способом проверить None.


услышать это из первых уст

цитирую руководство по стилю кодирования Python - PEP-008 (совместно определяется самим Гвидо),

сравнения с синглетами, как None всегда должно быть сделано с is или is not,никогда операторы равенства.

if variable is None:
   print 'Is None'

--

if variable is not None:
   print 'Isn\'t None'

это также можно сделать с isinstance по состоянию на ответ Алекса Холла:

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance также интуитивно понятен, но есть осложнение, что он требует линии

NoneType = type(None)

который не нужен для таких типов, как int и float.

самый простой способ, однако, без дополнительной строки в дополнение к ответ кардамона вероятно:
isinstance(x, type(None))

Итак, как я могу задать вопрос переменной, которая не является типом? Мне нужно использовать метод if

используя isinstance() не требуется is внутри if-заявлении:

if isinstance(x, type(None)): 
    #do stuff

дополнительная информация
Вы также можете проверить наличие нескольких типов в одном isinstance() заявление, как указано в документация. Просто напишите типы как кортеж.

isinstance(x, (type(None), bytes))

Python 2.7:

x = None
isinstance(x, type(None))

или

isinstance(None, type(None))

= = > True