Вы можете использовать type(None)
получить объект типа, но вы хотите использовать isinstance()
здесь, не type() in {...}
:
assert isinstance(value, (str, type(None)))
Объект NoneType
иначе не подвергается в любом месте.
Я не хотел бы использовать проверку для этого типа вообще на самом деле, я хотел бы использовать:
assert value is None or isinstance(value, str)
, как None
одноэлементно (очень нарочно) и NoneType
явно запрещает подклассов в любом случае:
>>> 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
Вы также должны использовать 'isinstance'. Для проверки может потребоваться кортеж типов. 'isinstance (value, (str, type (None)))' –
Если это не для модульного тестирования, можно утверждать, что вы обычно не должны вводить проверку вообще. –
@rmartinjak: некоторые программисты все еще предпочитают утверждать свои предположения о кодировании с помощью инструкции 'assert'. Поддержка есть. * I * не будет использовать утверждения и также будет использовать модульное тестирование, но если вы используете 'assert' в любом случае .. –