Странное поведение сравнения Python - PullRequest
2 голосов
/ 30 октября 2010

У меня есть пример кода, похожего на этот, значения (position = 2, object.position = 3):

    new_position = position
    old_position = object.position    

    logging.debug("1. new_position: %s, old_position: %s" % (new_position, old_position))

    if old_position != new_position:
        logging.debug("old position other than new position")
        if new_position > old_position:
            logging.debug("Why am I here ?")

и теперь отладка:

DEBUG 1. new_position: 2, old_position: 3
DEBUG 2. old position other than new position
DEBUG Why am I here?

Ответы [ 3 ]

4 голосов
/ 30 октября 2010

Вероятно, это потому, что вы сравниваете разные несовместимые типы (например, строки и целые числа).Если это так, то порядок зависит от алфавитного порядка имен типов.

>>> '2' > 3
True

Это относится к Python 2.x.В Python 3.x вместо этого поднимется TypeError.

2 голосов
/ 30 октября 2010

Вы уверены, что old_position и new_position являются целыми числами?Любой объект можно заставить печатать '2' и '3' при использовании %s ... даже если они осуществляют сравнения совершенно по-другому.

Попробуйте вместо этого %r.

0 голосов
/ 30 октября 2010

при условии, что оператор сравнения нормален, old_position != new_position эквивалентно old_position < new_position or old_position > new_position

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...