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

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 .

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 "", line 1, in  TypeError: type 'NoneType' is not an acceptable base type