Действительно неловкая (на первый взгляд простая) ошибка с целочисленными сравнениями в Python - PullRequest
0 голосов
/ 19 июля 2010

У меня есть следующий фрагмент кода, который не работает так, как я ожидаю ...

current_frame = 15 # just for showcasing purposes
g_ch = 7

if (current_frame != int(row[0])) and (int(row[1]) != g_ch):
                current_frame = int(row[0])
                print "curious================================="
                print current_frame
                print row
                print current_frame, " != ", int(row[0]), ", ", current_frame != int(row[0])
                print "========================================"

, который печатает для любого конкретного случая:

curious================================= 

15 

['15', '1', 'more data'] 15 != 15 , False

========================================

Это, очевидно, никогда не должно даже вводиться в операторе if, так как равенство показывает false. Почему это происходит?

edit: я также пробовал это с! = Вместо 'is not' и получил те же результаты.

Ответы [ 3 ]

6 голосов
/ 19 июля 2010

Сравнение значений выполняется с помощью оператора !=, а не is not, который сравнивает идентичность объекта.

Кроме того, я думаю, что это проблема с отступом.

1 голос
/ 19 июля 2010

Короче, вам нужно использовать == и !=, а не is. is сравнивает идентичность объекта, а не равенство.

0 голосов
/ 19 июля 2010

Вы присваиваете current_frame = int(row[0]) внутри if, который изменяет значение логического выражения.

...