Talvez eu esteja tendo um peido cerebral aqui, mas realmente não consigo descobrir o que há de errado com meu código:
for key in tmpDict:
print type(tmpDict[key])
time.sleep(1)
if(type(tmpDict[key])==list):
print 'this is never visible'
break
a saída é <type 'list'>
mas a instrução if nunca é acionada. Alguém pode detectar meu erro aqui?
list
como variável em algum lugar? Lembre-se de que, se você estiver trabalhando no REPL ou algo assim, ele ainda poderá ser redefinido há algum tempo.Respostas:
Seu problema é que você redefiniu
list
como uma variável anteriormente no seu código. Isso significa que quando você fizertype(tmpDict[key])==list
isso, retornaráFalse
porque eles não são iguais.Dito isto, você deve usar
isinstance(tmpDict[key], list)
ao testar o tipo de algo, isso não evitará o problema de substituição,list
mas é uma maneira mais Python de verificar o tipo.fonte
Você deveria tentar usar
isinstance()
No seu caso
Para elaborar:
EDIT 1: A diferença entre
isinstance()
etype()
por que aisinstance()
maneira mais preferida de verificar é queisinstance()
verifica as subclasses além disso, enquantotype()
não.fonte
Isso parece funcionar para mim:
fonte
Python 3.7.7
fonte
Embora não seja tão simples quanto
isinstance(x, list)
se poderia usar:e eu meio que gosto da esperteza simples disso
fonte