Hello,
Deep inside my code, in a nested if inside a nested for inside a class method, I'm comparing a certain index value to the length of a certain list, to validate I can access that index. The code looks something like that:
if t.index_value < len(work_list):
... do stuff ...
else:
... print some error ...
For clarification, index_value
is at least zero (validated somewhere else). To my surprise, even though I know the index_value
data is valid, the code keeps going to the "else:" clause. I added some ad-hoc debug code:
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 ...
Following is the output:
>> Checking whether 3<4
>> 3
>> 4
>> False
Can anyone help me understand what's going on here?
Further clarifications:
- work_list is a local variable instantiated within the method
- t is a class instance, instantiated within the method (
t = SomeClass()
)
Update: The problem was that the type of t.index_value
was UNICODE and not int. The reason was that I deserialized the contents of t from a text file, where the value of index_value is represented by a single digit character. After I extracted it from the text, I immediately assigned it to index_value
, without passing it through int() which it what I should have done, and that solved the problem.
I decided to keep the "controversial" title despite the fact it's clearly my bug and not Python's, because people with the same problem may find it using this title.