2010-04-29 4 views
8

Je reçois une erreur KeyError pour une clé hors dictionnaire, même si je sais que la clé est en fait dans le dictionnaire. Des idées sur ce qui pourrait en être la cause?Python déclenche une erreur KeyError (pour une clé hors dictionnaire) même si la clé est dans le dictionnaire

print G.keys() 

renvoie les éléments suivants:

['24', '25', '20', '21', '22', '23', '1', '3', '2', '5', '4', '7', '6', '9', '8', '11', '10', '13', '12', '15', '14', '17', '16', '19', '18'] 

mais lorsque je tente d'accéder à une valeur dans le dictionnaire sur la ligne de code suivante ...

for w in G[v]: #note that in this example, v = 17 

Je reçois l'erreur suivante message:

KeyError: 17 

Toute aide, conseils ou conseils sont tous appréciés. Merci.

+0

Encore une chose qui mérite d'être mentionnée, j'ai essayé d'accéder à différentes valeurs de clé (1, 2, 3, etc.) et j'obtiens toujours les mêmes résultats. – ignorantslut

+3

Est-ce que v est défini sur 17 ou 17? – Syntactic

Répondre

26

qui est simple, 17 != '17'

+0

wow je me sens comme un idiot. Je lis ces valeurs à partir d'un fichier, pour une raison quelconque, cela ne m'est pas venu à l'esprit - merci! – ignorantslut

+1

Ça sent comme un défaut de conception pour moi. – tchrist

+0

@tchrist Absence de moulages implicites d'ints à des chaînes comme un défaut de conception dans la langue? – wRAR

5

Les touches sont des chaînes, vous essayez d'y accéder comme ints.

+0

Alors? Dumb que cela devrait importer. Ce n'est pas Java, tu sais! – tchrist

+2

@tchrist: Incorrect. Python est fortement typé ... comme il se doit. Ce n'est pas PHP, tu sais! (Yuck.) – FogleBird

3

essayez avec v = '17'. Vous devez convertir votre int en string

Questions connexes