Проверка списка типов == в python

У меня может быть мозговой пердит здесь, но я действительно не могу понять, что случилось с моим кодом:

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 никогда не запускается. Может ли кто-нибудь указать мою ошибку здесь?

Ответ 1

Ваша проблема в том, что вы переопределили list в качестве переменной ранее в вашем коде. Это означает, что когда вы делаете type(tmpDict[key])==list if возвращает False потому что они не равны.

При этом вы должны вместо этого использовать isinstance(tmpDict[key], list) при тестировании типа чего-либо, это не избавит от проблемы перезаписи list но является более Pythonic-способом проверки типа.

Ответ 2

Вы должны попробовать использовать 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 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 list
    print "This should work just fine"

Ответ 3

Кажется, это работает для меня:

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