Być może mam tu pierdnięcie mózgu, ale naprawdę nie mogę zrozumieć, co jest nie tak z moim kodem:
for key in tmpDict:
print type(tmpDict[key])
time.sleep(1)
if(type(tmpDict[key])==list):
print 'this is never visible'
break
dane wyjściowe są, <type 'list'>
ale instrukcja if nigdy się nie uruchamia. Czy ktoś może tutaj zauważyć mój błąd?
list
używałeś gdzieś jako zmiennej? Uważaj, jeśli pracujesz w REPL lub coś takiego, może to być przedefiniowane jakiś czas temu.Odpowiedzi:
Problem polega na tym, że ponownie zdefiniowałeś
list
wcześniej zmienną w kodzie. Oznacza to, że kiedy to zrobisz,type(tmpDict[key])==list
jeśli wróci,False
ponieważ nie są równe.To powiedziawszy, powinieneś zamiast tego używać
isinstance(tmpDict[key], list)
podczas testowania typu czegoś, nie pozwoli to uniknąć problemu nadpisywania,list
ale jest bardziej pythonicznym sposobem sprawdzania typu.źródło
Powinieneś spróbować użyć
isinstance()
W Twoim przypadku
Opracować:
EDYCJA 1: Różnica między
isinstance()
itype()
dlaczegoisinstance()
najbardziej preferowanym sposobem sprawdzania jestisinstance()
sprawdzenie dodatkowo podklas, podczas gdytype()
nie.źródło
Wydaje mi się, że to działa:
źródło
Python 3.7.7
źródło
Chociaż nie tak proste, jak
isinstance(x, list)
można by użyć:i podoba mi się prosta sprytność tego
źródło