J'ai peut-être un cerveau péter ici, mais je ne peux vraiment pas comprendre ce qui ne va pas avec mon code:
for key in tmpDict:
print type(tmpDict[key])
time.sleep(1)
if(type(tmpDict[key])==list):
print 'this is never visible'
break
la sortie est <type 'list'>
mais l'instruction if ne se déclenche jamais. Quelqu'un peut-il repérer mon erreur ici?
list
comme variable quelque part? Sachez que si vous travaillez dans le REPL ou autre, il peut encore être redéfini il y a quelque temps.Réponses:
Votre problème est que vous avez redéfini en
list
tant que variable précédemment dans votre code. Cela signifie que lorsque vous le ferez, voustype(tmpDict[key])==list
reviendrezFalse
car ils ne sont pas égaux.Cela étant dit, vous devriez plutôt l'utiliser
isinstance(tmpDict[key], list)
lors du test du type de quelque chose, cela n'évitera pas le problème de l'écrasementlist
mais c'est une manière plus pythonique de vérifier le type.la source
Vous devriez essayer d'utiliser
isinstance()
Dans ton cas
Élaborer:
EDIT 1: La différence entre
isinstance()
ettype()
et pourquoi la manière laisinstance()
plus préférée de vérifier est deisinstance()
vérifier les sous-classes en plus, alors que cetype()
n'est pas le cas.la source
Cela semble fonctionner pour moi:
la source
Python 3.7.7
la source
Bien que ce ne soit pas aussi simple
isinstance(x, list)
qu'on pourrait l'utiliser aussi:et j'aime un peu l'intelligence simple de ça
la source