vacio str not none empty blank python python-3.x types nonetype

str - ¿Dónde se encuentra el tipo de letra Ninguno en Python 3.x?



python is blank (2)

En Python 3, me gustaría comprobar si el value es una cadena o None .

Una forma de hacer esto es

assert type(value) in { str, NoneType }

Pero, ¿dónde se encuentra NoneType en Python?

Sin ninguna importación, el uso de NoneType produce NameError: name ''NoneType'' is not defined .


Por favor, utilice el type(None) . Puede usar el shell de Python para verificar como en la siguiente función en la que utilizo type(None) para cambiar de None a NoneType .

def to_unicode(value): ''''''change value to unicode'''''' try: if isinstance(value, (str,type(None))): return value if not isinstance(value, bytes): raise TypeError("Expected bytes, unicode, or None; got %r" % type(value)) return value.decode("utf-8") except UnicodeDecodeError: return repr(value)


Puede usar type(None) para obtener el objeto type, pero desea usar isinstance() aquí, no type() in {...} :

assert isinstance(value, (str, type(None)))

El objeto NoneType no se expone de ninguna otra manera.

No usaría la comprobación de tipos para eso en realidad, usaría:

assert value is None or isinstance(value, str)

as None es un singleton (muy a propósito) y NoneType prohíbe explícitamente la subclasificación de todos modos:

>>> type(None)() is None True >>> class NoneSubclass(type(None)): ... pass ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: type ''NoneType'' is not an acceptable base type