Where is the NoneType located in Python 3.x? Where is the NoneType located in Python 3.x? python-3.x python-3.x

Where is the NoneType located in Python 3.x?


You can use type(None) to get the type object, but you want to use isinstance() here, not type() in {...}:

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

The NoneType object is not otherwise exposed anywhere.

I'd not use type checking for that at all really, I'd use:

assert value is None or isinstance(value, str)

as None is a singleton (very much on purpose) and NoneType explicitly forbids subclassing anyway:

>>> type(None)() is NoneTrue>>> 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


types.NoneType is being reintroduced in Python 3.10.

What’s New In Python 3.10

Improved Modules

types

Reintroduced the types.EllipsisType, types.NoneType and types.NotImplementedType classes, providing a new set of types readily interpretable by type checkers. (Contributed by Bas van Beek in bpo-41810.)

The discussion about the change was motivated by a need for types.EllipsisType, leading to types.NoneType also being added for consistency.


Please use type(None). You can use python shell to check like in the below function in which I use type(None) in order to change from None to 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)