在python中检查type == list

我不知道我的代码出了什么问题:

for key in tmpDict:
print type(tmpDict[key])
time.sleep(1)
if(type(tmpDict[key])==list):
print 'this is never visible'
break

输出是<type 'list'>,但if语句永远不会触发。有人能发现我的错误吗?

460530 次浏览

你应该尝试使用isinstance()

if isinstance(object, list):
## DO what you want

在你的情况下

if isinstance(tmpDict[key], list):
## DO SOMETHING

阐述:

x = [1,2,3]
if type(x) == list():
print "This wont work"
if type(x) == list:                  ## one of the way to see if it's list
print "this will work"
if type(x) == type(list()):
print "lets see if this works"
if isinstance(x, list):              ## most preferred way to check if it's list
print "This should work just fine"

isinstance()type()之间的区别是,isinstance()检查子类,而type()不检查子类。

你的问题是你在之前的代码中将list重新定义为一个变量。这意味着当你执行type(tmpDict[key])==list if将返回False,因为它们不相等。

也就是说,你应该在测试某个东西的类型时使用isinstance(tmpDict[key], list),这不会避免覆盖list的问题,而是一种更python化的检查类型的方式。

这似乎对我很管用:

>>>a = ['x', 'y', 'z']
>>>type(a)
<class 'list'>
>>>isinstance(a, list)
True

Python 3.7.7

import typing
if isinstance([1, 2, 3, 4, 5] , typing.List):
print("It is a list")

虽然不像isinstance(x, list)那样简单,但也可以使用:

this_is_a_list=[1,2,3]
if type(this_is_a_list) == type([]):
print("This is a list!")

我有点喜欢这种简单的聪明