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