Tengo un método que a veces devuelve un valor NoneType. Entonces, ¿cómo puedo cuestionar una variable que 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.
None
es el único valor que devuelve su método para el cualbool(returnValue)
es igualFalse
, entoncesif not new:
debería funcionar bien. Esto ocurre a veces en lasre.match
bibliotecas incorporadas; por ejemplo, devuelve Ninguno o un objeto de coincidencia real.null
yNone
en python aquí .Respuestas:
Usar
is
operador, como este¿Por qué esto funciona?
Dado que
None
es el único objeto singleton deNoneType
Python, podemos usar elis
operador para verificar si una variable tieneNone
o no.Citando de
is
documentos ,Como solo puede haber una instancia de
None
,is
sería la forma preferida de verificarNone
.Escucharlo de la boca del caballo
Citando las Directrices de estilo de codificación de Python - PEP-008 (definidas conjuntamente por el propio Guido),
fuente
== None
yis None
?None
, ambos arrojarán resultados similares.pandas
existe un DataFrame; para eso,type(df) is type(None)
The truth value of a DataFrame is ambiguous
fuente
También se puede hacer
isinstance
según la respuesta de Alex Hall :isinstance
también es intuitivo pero existe la complicación de que requiere la líneaNoneType = type(None)
que no es necesario para tipos como
int
yfloat
.fuente
NoneType
yNone
es un singleton,isinstance
no debe usarse para detectarNone
, sino que debe hacer lo que dice la respuesta aceptada, y usaris None
ois not None
.Como lo señala el comentario de Aaron Hall:
Respuesta original
Sin embargo, la forma más simple, sin la línea adicional además de la respuesta del cardamomo es:
isinstance(x, type(None))
El uso
isinstance()
no requiere unis
dentro de laif
declaración:Información adicional
También puede verificar si hay varios tipos en una
isinstance()
declaración como se menciona en la documentación . Simplemente escriba los tipos como una tupla.fuente
NoneType
yNone
es un singleton,isinstance
no debe usarse para detectarNone
, sino que debe hacer lo que dice la respuesta aceptada, y usaris None
ois not None
.python 3.6.7
isinstance
qué no se debe usar? Entiendo queis
debería preferirse, pero hay algunos casos en los que el formulario isinstance se siente más natural (como verificar múltiples tipos a la vezisinstance(x, (str, bool, int, type(None)))
). ¿Es solo una preferencia personal o hay una advertencia que desconozco?type
2. luego llamarla 3. luego buscar el tipo deNone
- cuandoNone
es tanto un singleton como una palabra clave. Otro inconveniente: 4. esto no es muy estándar y levantará las cejas cuando las personas estén mirando su código.x is None
Es un cheque más optimizado. Sugeriríax is None or isinstance(x, (str, bool, int))
, pero también sugeriría que pienses más en lo que estás haciendo cuando estás haciendo ese tipo de verificación de tipos que no tienen mucho en común ...No estoy seguro si esto responde la pregunta. Pero sé que esto me llevó un tiempo darme cuenta. Estaba recorriendo un sitio web y de repente el nombre de los autores ya no estaba allí. Así que necesitaba una declaración de verificación.
El autor puede ser cualquier variable en este caso, y
None
puede ser cualquier tipo que esté buscando.fuente
None
es un singleton,type
no debe usarse para detectarNone
, sino que debe hacer lo que dice la respuesta aceptada, y usaris None
ois not None
.Python 2.7:
o
==> Verdadero
fuente
NoneType
yNone
es un singleton,isinstance
no debe usarse para detectarNone
, sino que debe hacer lo que dice la respuesta aceptada, y usaris None
ois not None
.Espero que este ejemplo te sea útil)
Entonces, puede verificar el tipo del nombre de la variable
fuente