У меня есть метод, который иногда возвращает значение NoneType. Так, как я могу подвергнуть сомнению переменную, которая является NoneType? Мне нужно использовать , если метод, например ,
if not new:
new = '#'
Я знаю, что это неправильный путь, и я надеюсь, что вы понимаете, что я имел в виду.
None
это единственное значение, которое возвращает ваш метод, для которогоbool(returnValue)
равноFalse
, тоif not new:
должно работать нормально. Это иногда происходит во встроенных библиотеках - например,re.match
возвращает None или объект истинного соответствия.null
иNone
в Python здесь .Ответы:
Используйте
is
оператор, как этоПочему это работает?
Так
None
как это единственный синглтон объектNoneType
в Python, мы можем использоватьis
оператор, чтобы проверить, есть ли переменнаяNone
в нем или нет.Цитирование из
is
документов ,Поскольку может быть только один экземпляр
None
,is
будет предпочтительным способом проверкиNone
.Услышь это изо рта лошади
Цитирование Руководства по стилю кодирования Python - PEP-008 (совместно определенное самим Гвидо),
источник
== None
иis None
?None
, они оба дадут похожий результат.pandas
существует ли DataFrame - для этого я использую,type(df) is type(None)
чтобы избежать:The truth value of a DataFrame is ambiguous
источник
Она также может быть сделано с
isinstance
согласно ответу Алекса Холла :isinstance
также интуитивно понятен, но есть сложность, которая требует линииNoneType = type(None)
который не нужен для таких типов, как
int
иfloat
.источник
NoneType
и, поскольку онNone
является единичным,isinstance
его не следует использовать для обнаруженияNone
- вместо этого вы должны делать то, что говорит принятый ответ, и использоватьis None
илиis not None
.Как указано в комментарии Аарона Холла:
Оригинальный ответ:
Самый простой способ, однако, без дополнительной строки в дополнение к ответу кардамона, вероятно:
isinstance(x, type(None))
Использование
isinstance()
не требуетis
внутри-if
состояния:Дополнительная информация
Вы также можете проверить наличие нескольких типов в одном
isinstance()
операторе, как указано в документации . Просто напишите типы в виде кортежа.источник
NoneType
и, поскольку онNone
является единичным,isinstance
его не следует использовать для обнаруженияNone
- вместо этого вы должны делать то, что говорит принятый ответ, и использоватьis None
илиis not None
.python 3.6.7
isinstance
не следует использовать? Я понимаю, что этоis
должно быть предпочтительным, но в некоторых случаях форма isinstance выглядит более естественной (например, проверка нескольких типов одновременноisinstance(x, (str, bool, int, type(None)))
). Это просто личное предпочтение или есть предостережение, о котором я не знаю?type
2. затем вызов его 3. затем поиск типаNone
- когдаNone
это и одиночный, и ключевое слово. Еще один недостаток: 4. это очень нестандартно и вызывает удивление, когда люди смотрят на ваш код.x is None
это более оптимизированная проверка. Я бы предложилx is None or isinstance(x, (str, bool, int))
- но я бы также посоветовал вам больше думать о том, что вы делаете, когда выполняете такого рода проверку типов для типов, которые не имеют много общего ...Не уверен, что это отвечает на вопрос. Но я знаю, что мне понадобилось время, чтобы понять. Я просматривал веб-сайт, и вдруг имена авторов уже не было. Так что нужно проверить заявление.
Автор может быть любой переменной в этом случае, и
None
может быть любым типом, который вы проверяете.источник
None
это одноэлементный объект,type
его не следует использовать для обнаруженияNone
- вместо этого следует делать, как говорится в принятом ответе, и использоватьis None
илиis not None
.Python 2.7:
или
==> Правда
источник
NoneType
и, поскольку онNone
является единичным,isinstance
его не следует использовать для обнаруженияNone
- вместо этого вы должны делать то, что говорит принятый ответ, и использоватьis None
илиis not None
.Надеюсь этот пример будет вам полезен)
Итак, вы можете проверить тип имени переменной
источник