2009-05-15 3 views
1

Глубоко внутри моего кода, в вложенном, если внутри вложенного внутри метода класса, я сравниваю определенное значение индекса с длиной определенного списка, чтобы проверить, могу ли я получить доступ к этому индексу. Код выглядит примерно так:Сравнение номеров - ошибка 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, потому что люди с одинаковой проблемой могут найти это, используя этот заголовок.

+0

Не могли бы вы добавить строку под своей первой операцией печати? Попробуйте распечатать (type (t.index_value)) – Wesley

ответ

8

В моем опыте, каков тип «t.index_value»? Может быть, это строка «3».

>>> print '3' < 4 
False 
+0

В этом была проблема, спасибо –

2

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