Ho un codice Python che genera un'eccezione KeyError. Finora non sono stato in grado di riprodurre al di fuori dell'ambiente operativo, quindi non posso pubblicare qui un caso di test ridotto.Come può "k in d" essere False, ma "k in d.keys()" essere True?
Il codice che sta sollevando l'eccezione viene iterazione attraverso un ciclo come questo:
for k in d.keys():
if condition:
del d[k]
La linea del[k]
genera l'eccezione. Ho aggiunto una clausola try/except
e sono stato in grado di determinare che k in d
è False, ma k in d.keys()
è True.
Le chiavi di d
sono metodi associati di istanze di classi vecchio stile.
La classe implementa __cmp__
e __hash__
, quindi è qui che ho concentrato la mia attenzione.
Bene, se ora che cosa 'k' sta causando i problemi, perché non solo vedere se esistono in' d.keys() 'e in' d'? – SilentGhost
Permettetemi di chiarire, se ignorate l'iterazione e semplicemente testate il dizionario, c'è una chiave per cui 'k in d' è vero ma' k in d.keys() 'è falso? Cioè l'iterazione è irrilevante per il problema? – katrielalex
Puoi mostrare la tua funzione '__hash__'? – user470379