¿Cómo "probar" NoneType en Python?
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.
Entonces, ¿cómo puedo cuestionar una variable que no es NoneType?
Utilice is
un operador como este
if variable is None:
¿Por qué esto funciona?
Dado que None
es el único objeto singleton NoneType
en Python, podemos usar is
el operador para verificar si una variable contiene None
o no.
Citando is
documentos ,
Los operadores
is
andis not
prueban la identidad del objeto:x is y
es verdadero si y solo six
yy
son el mismo objeto.x is not y
produce el valor de verdad inverso.
Dado que sólo puede haber una instancia de None
, is
serí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
None
siempre deben realizarse conis
oris not
, nunca con los operadores de igualdad .
if variable is None:
...
if variable is not None:
...
También se puede hacer isinstance
según la respuesta de Alex Hall :
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
También es intuitivo pero tiene la complicación de que requiere la línea
NoneType = type(None)
que no es necesario para tipos como int
y float
.
Como lo señala el comentario de Aaron Hall:
Como no puede crear subclases
NoneType
yNone
es un singleton,isinstance
no debe usarse para detectarNone
; en su lugar, debe hacer lo que dice la respuesta aceptada y usaris None
ois 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 is
dentro de la if
sentencia:
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))