2010-04-29 2 views
8

Ricevo un KeyError per una chiave fuori dizionario, anche se so che la chiave è in effetti nel dizionario. Qualche idea su cosa potrebbe causare questo?Python genera un KeyError (per una chiave fuori dizionario) anche se la chiave IS nel dizionario

print G.keys() 

restituisce il seguente:

['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'] 

ma quando provo ad accedere un valore nel dizionario sulla prossima riga di codice ...

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

ottengo il seguente errore messaggio:

KeyError: 17 

Qualsiasi aiuto, consiglio o consiglio sono tutti apprezzati. Grazie.

+0

Un'altra cosa degna di nota, ho provato ad accedere a diversi valori chiave (1, 2, 3, ecc.) E ottenere comunque gli stessi risultati. – ignorantslut

+3

v impostato su 17 o '17'? – Syntactic

risposta

26

che è semplice, 17 != '17'

+0

wow, mi sento un idiota. Sto leggendo questi valori da un file, per qualche ragione questo non mi è venuto in mente - grazie! – ignorantslut

+1

Odori come un difetto di progettazione per me. – tchrist

+0

@tchrist assenza di cast impliciti di stringhe di stringhe come difetto di progettazione nella lingua? – wRAR

5

le chiavi sono stringhe, si sta tentando di accedervi come int.

+0

Quindi? Scemo che ciò dovrebbe avere importanza. Questo non è Java, lo sai! – tchrist

+2

@tchrist: sbagliato. Python è fortemente digitato ... come dovrebbe essere. Questo non è PHP, lo sai! (Che schifo.) – FogleBird

3

provare con v = '17'. Devi convertire il tuo int in stringa