在Python中有None
单例,它在某些情况下表现得相当奇怪:
>>> a = None
>>> type(a)
<type 'NoneType'>
>>> isinstance(a,None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
首先,<type 'NoneType'>
显示None
不是一种类型,但NoneType
是一种类型。然而,当您运行isinstance(a,NoneType)
时,它会响应一个错误:NameError: name 'NoneType' is not defined
现在,考虑到这一点,如果您有一个函数的输入默认值设置为None
,并且需要进行检查,您将执行以下操作:
if variable is None:
#do something
else:
#do something
我不能执行以下操作的原因是什么:
if isinstance(variable,None): #or NoneType
#do something
else:
#do something
我只是在寻找一个详细的解释,这样我就可以更好地理解这个
编辑:优秀的应用程序
假设我想使用isinstance
,这样如果variable
是包括None
在内的多种类型,我就可以执行某些操作
if isinstance(variable,(None,str,float)):
#do something
发布于 2013-06-20 02:20:45
您可以尝试:
>>> variable = None
>>> isinstance(variable,type(None))
True
>>> variable = True
>>> isinstance(variable,type(None))
False
isinstance在这里接受两个参数isinstance(object, classinfo)
,通过传递None
,你将classinfo
设置为None,因此出现错误。你需要在类型中传递。
发布于 2013-06-20 02:20:03
None
只是types.NoneType
的一个值,它不是一个类型。
错误很明显:
TypeError: isinstance() arg 2必须是类、类型或类和类型的元组
从docs
None
是types.NoneType
的唯一value。None
通常用于表示缺少值,例如当默认参数未传递给函数时。
您可以使用types.NoneType
>>> from types import NoneType
>>> isinstance(None, NoneType)
True
is
运算符也工作得很好:
>>> a = None
>>> a is None
True
发布于 2013-06-20 02:23:37
None
是一个值(实例),而不是类型。如错误消息所示,isinstance
期望第二个参数是一个类型。
None的类型为type(None)
,如果导入(from types import NoneType
),则类型为Nonetype
注意:进行测试的惯用方法是variable is None
。简短且具有描述性。
https://stackoverflow.com/questions/17198466
复制相似问题