Глубоко внутри моего кода, в вложенном, если внутри вложенного внутри метода класса, я сравниваю определенное значение индекса с длиной определенного списка, чтобы проверить, могу ли я получить доступ к этому индексу. Код выглядит примерно так:Сравнение номеров - ошибка Python?
if t.index_value < len(work_list):
... do stuff ...
else:
... print some error ...
Для разъяснения index_value
составляет, по меньшей мере, равна нулю (проверенную где-то еще). К моему удивлению, хотя я знаю, что данные index_value
действительны, код продолжает переходить к предложению «else:». Я добавил некоторые одноранговую отладочный код:
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 ...
Ниже приведен результат:
>> Checking whether 3<4
>> 3
>> 4
>> False
Может кто-нибудь помочь мне понять, что происходит здесь?
Дальнейшие уточнения:
- work_list является локальной переменной экземпляра в рамках метода
- Т представляет собой экземпляр класса, экземпляр в методе (
t = SomeClass()
)
Обновление: проблема заключалась в том, что тип t.index_value
был UNICODE, а не int. Причина заключалась в том, что я десериализовал содержимое t из текстового файла, где значение index_value представлено символом с цифрой. После того как я извлек его из текста, я сразу же назначил его index_value
, не передавая его через int(), что это то, что я должен был сделать, и это решило проблему.
Я решил сохранить «спорный» титул, несмотря на то, что это явно моя ошибка, а не Python, потому что люди с одинаковой проблемой могут найти это, используя этот заголовок.
Не могли бы вы добавить строку под своей первой операцией печати? Попробуйте распечатать (type (t.index_value)) – Wesley