¿Cómo "probar" NoneType en Python?

Resuelto CrveniZg asked hace 10 años • 9 respuestas

Tengo un método que a veces devuelve un valor NoneType. Entonces, ¿cómo puedo cuestionar una variable que no es NoneType? Necesito usar el método if , por ejemplo.

if not new:
    new = '#'

Sé que es el camino equivocado y espero que entiendas lo que quise decir.

CrveniZg avatar Apr 15 '14 21:04 CrveniZg
Aceptado

Entonces, ¿cómo puedo cuestionar una variable que no es NoneType?

Utilice isun operador como este

if variable is None:

¿Por qué esto funciona?

Dado que Nonees el único objeto singleton NoneTypeen Python, podemos usar isel operador para verificar si una variable contiene Noneo no.

Citando isdocumentos ,

Los operadores isand is notprueban la identidad del objeto: x is yes verdadero si y solo si xy yson el mismo objeto. x is not yproduce el valor de verdad inverso.

Dado que sólo puede haber una instancia de None, issería la forma preferida de comprobarlo None.


Escúchalo de la boca del caballo

Citando las pautas de estilo de codificación de Python: PEP-008 (definidas conjuntamente por el propio Guido),

Las comparaciones con singletons como Nonesiempre deben realizarse con isoris not , nunca con los operadores de igualdad .

thefourtheye avatar Apr 15 '2014 14:04 thefourtheye
if variable is None:
   ...

if variable is not None:
   ...
elhoucine avatar Apr 15 '2014 14:04 elhoucine

También se puede hacer isinstancesegún la respuesta de Alex Hall :

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

isinstanceTambién es intuitivo pero tiene la complicación de que requiere la línea

NoneType = type(None)

que no es necesario para tipos como inty float.

cardamom avatar Jan 26 '2018 15:01 cardamom

Como lo señala el comentario de Aaron Hall:

Como no puede crear subclases NoneTypey Nonees un singleton, isinstanceno debe usarse para detectar None; en su lugar, debe hacer lo que dice la respuesta aceptada y usar is Noneo is not None.


Respuesta original:

Sin embargo, la forma más sencilla, sin la línea adicional además de la respuesta del cardamomo, es probablemente:
isinstance(x, type(None))

Entonces, ¿cómo puedo cuestionar una variable que no es NoneType? Necesito usar el método if

El uso isinstance()no requiere una declaración isdentro de la ifsentencia:

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

Información adicional
También puede verificar varios tipos en una sola isinstance()declaración, como se menciona en la documentación . Simplemente escriba los tipos como una tupla.

isinstance(x, (type(None), bytes))
Martin Müsli avatar Sep 05 '2018 14:09 Martin Müsli