Сравнение чисел - Python Bug?

1

Глубоко внутри моего кода, в вложенном, если внутри вложенного внутри метода класса, я сравниваю определенное значение индекса с длиной определенного списка, чтобы проверить, могу ли я получить доступ к этому индексу. Код выглядит примерно так:

if t.index_value < len(work_list):
    ... do stuff ...
else:
    ... print some error ...

Для пояснения, index_value является по крайней мере нулевым (подтверждается где-то еще). К моему удивлению, хотя я знаю, что данные index_value действительны, код продолжает переходить к предложению else:. Я добавил код отладки ad-hoc:

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 - экземпляр класса, созданный в рамках метода (t = SomeClass())

Обновление: проблема заключалась в том, что тип t.index_value был UNICODE, а не int. Причина заключалась в том, что я десериализовал содержимое t из текстового файла, где значение index_value представлено символом с цифрой. После того, как я извлек его из текста, я сразу назначил его index_value, не передавая его через int(), который он должен был сделать, и это решило проблему.

Я решил сохранить "спорный" титул, несмотря на то, что это явно моя ошибка, а не Python, потому что люди с одинаковой проблемой могут найти это, используя этот заголовок.

  • 0
    Не могли бы вы добавить строку под своим первым оператором печати? Попробуйте напечатать (тип (t.index_value))
Теги:
numbers

2 ответа

8
Лучший ответ

По моему опыту, какой тип "t.index_value"? Может быть, это строка "3".

>>> print '3' < 4
False
  • 0
    Это была проблема, спасибо
2

Чтобы отображать значения, которые могут быть разных типов, чем вы ожидаете (например, строка, а не число, как предлагает kcwu), используйте repr(x) и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню