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.

Nonees 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.matchbibliotecas incorporadas; por ejemplo, devuelve Ninguno o un objeto de coincidencia real.nullyNoneen python aquí .Respuestas:
Usar
isoperador, como este¿Por qué esto funciona?
Dado que
Nonees el único objeto singleton deNoneTypePython, podemos usar elisoperador para verificar si una variable tieneNoneo no.Citando de
isdocumentos ,Como solo puede haber una instancia de
None,isserí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
== Noneyis None?None, ambos arrojarán resultados similares.pandasexiste un DataFrame; para eso,type(df) is type(None)The truth value of a DataFrame is ambiguousfuente
También se puede hacer
isinstancesegún la respuesta de Alex Hall :isinstancetambién es intuitivo pero existe la complicación de que requiere la líneaNoneType = type(None)que no es necesario para tipos como
intyfloat.fuente
NoneTypeyNonees un singleton,isinstanceno debe usarse para detectarNone, sino que debe hacer lo que dice la respuesta aceptada, y usaris Noneois 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 unisdentro de laifdeclaració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
NoneTypeyNonees un singleton,isinstanceno debe usarse para detectarNone, sino que debe hacer lo que dice la respuesta aceptada, y usaris Noneois not None.python 3.6.7isinstancequé no se debe usar? Entiendo queisdeberí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?type2. luego llamarla 3. luego buscar el tipo deNone- cuandoNonees 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 NoneEs 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
Nonepuede ser cualquier tipo que esté buscando.fuente
Nonees un singleton,typeno debe usarse para detectarNone, sino que debe hacer lo que dice la respuesta aceptada, y usaris Noneois not None.Python 2.7:
o
==> Verdadero
fuente
NoneTypeyNonees un singleton,isinstanceno debe usarse para detectarNone, sino que debe hacer lo que dice la respuesta aceptada, y usaris Noneois not None.Espero que este ejemplo te sea útil)
Entonces, puede verificar el tipo del nombre de la variable
fuente