¿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 es un tipo de entrada? 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 es un tipo de entrada?

El uso is operador, como este

 if variable is None: 

¿Por qué esto funciona?

Ya que None es el único objeto singleton de NoneType en Python, podemos usar is operador para verificar si una variable tiene None en él o no.

De citar is docs ,

Los operadores is y is not prueban la identidad del objeto: x is y es verdadero si y solo si x e y son el mismo objeto. x is not y produce el valor de verdad inverso.

Dado que solo puede haber una instancia de None , is sería la forma preferida de marcar None .


Escuchalo desde la boca del caballo.

Citas de las Pautas de estilo de encoding de Python – PEP-008 (definidas conjuntamente por el propio Guido),

Las comparaciones con singletons como None deben hacerse siempre con o is not , nunca con los operadores de igualdad .

 if variable is None: ... 

 if variable is not None: ... 

También se puede hacer con 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 existe la complicación de que requiere la línea.

NoneType = type(None)

que no es necesario para tipos como int y float .

Como señala el comando de Aaron Hill:

Ya que no puede subclasificar el NoneType None y ya que None es un singleton, isinstance no debe usarse para detectar None , sino que debe hacer lo que dice la respuesta aceptada, y el uso is None o 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 es un tipo de entrada? Necesito usar el método if

El uso de isinstance() no requiere un is dentro de la statement if :

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

Información Adicional
También puede verificar múltiples tipos en una statement de isinstance() como se menciona en la documentación) . Solo escribe los tipos como una tupla.

 isinstance(x, (type(None), bytes)) 

Python 2.7:

 x = None isinstance(x, type(None)) 

o

 isinstance(None, type(None)) 

==> Verdadero

Espero que este ejemplo te sea de utilidad.

 print(type(None) # NoneType 

Por lo tanto, puede comprobar el tipo de nombre de la variable

 #Example name = 12 # name = None if type(name) != type(None): print(name) else: print("Can't find name") 

No estoy seguro si esto responde a la pregunta. Pero sé que esto me tomó un tiempo para averiguar. Estaba recorriendo un sitio web y, de repente, el nombre de los autores ya no estaba allí. Así que necesitaba una statement de verificación.

 if type(author) == type(None): my if body else: my else body 

Autor puede ser cualquier variable en este caso, y None puede ser de cualquier tipo que esté verificando.