我知道不建议比较类型,但我有一些代码在if elif系列中执行此操作。然而,我很困惑None值如何工作。与无变量类型的比较
def foo(object)
otype = type(object)
#if otype is None: # this doesn't work
if object is None: # this works fine
print("yep")
elif otype is int:
elif ...
为什么我可以比较只是is int
罚款等,但不与is None
? types.NoneType似乎在Python 3.2消失,所以我不能使用...
以下
i = 1
print(i)
print(type(i))
print(i is None)
print(type(i) is int)
打印
1
<class 'int'>
False
True
而
i = None
print(i)
print(type(i))
print(i is None)
print(type(i) is None)
印花
None
<class 'NoneType'>
True
False
我猜None
是特别的,但是什么给了? NoneType
确实存在,还是Python对我说谎?
非常真实和重要,但问题的其他部分也值得回答。 – delnan
这使得在任何类型检查代码中检查'None'-ness是一个特例。有时,检查'NoneType'比检查'x是None或isinstance(x,(footype,bartype))'更清晰。 –
对象标识实际上是检查类型的正确的事情:'type(obj)是SomeType'是我推荐用于检查*确切*类型匹配(非常罕见的要求)。在常见情况下,使用'isinstance()'。 –