Au plus profond de mon code, dans un imbriqué si à l'intérieur d'un imbriqué dans une méthode de classe, je compare une certaine valeur d'index à la longueur d'une certaine liste, pour valider je peux accéder à cet index. Le code ressemble à quelque chose comme ça:Comparaison de nombres - Bug Python?
if t.index_value < len(work_list):
... do stuff ...
else:
... print some error ...
Pour plus de précisions, index_value
est au moins zéro (validé ailleurs). À ma grande surprise, même si je sais que les données index_value
sont valides, le code continue d'aller à la clause "else:". Je glissai ad hoc code de débogage:
print('Checking whether '+str(t.index_value)+"<"+str(len(work_list)))
x = t.index_value
y = len(work_list)
print(x)
print(y)
print(x<y)
if t.index_value < len(work_list):
... do stuff ...
else:
... print some error ...
Voici le résultat:
>> Checking whether 3<4
>> 3
>> 4
>> False
Quelqu'un peut-il me aider à comprendre ce qui se passe ici?
D'autres précisions:
- work_list est une variable locale instancié dans la méthode
- t est une instance de classe, instancié dans la méthode (
t = SomeClass()
)
Mise à jour: La problème était que le type de t.index_value
était UNICODE et non int. La raison en est que j'ai désérialisé le contenu de t d'un fichier texte, où la valeur de index_value est représentée par un caractère à un chiffre. Après l'avoir extrait du texte, je l'ai immédiatement assigné à index_value
, sans passer par int() ce que j'aurais dû faire, et cela a résolu le problème.
J'ai décidé de garder le titre "controversé" malgré le fait que ce soit clairement mon bug et pas celui de Python, car les gens avec le même problème peuvent le trouver en utilisant ce titre.
Pourriez-vous ajouter une ligne sous votre première déclaration d'impression? Essayez print (tapez (t.index_value)) – Wesley