我知道不建議比較類型,但我有一些代碼在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()'。 –