奇怪的python的比较行为

时间:2010-10-30 18:21:26

标签: python compare

我有一个示例代码,值(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 个答案:

答案 0 :(得分:4)

这可能是因为您正在比较不同的不兼容类型(例如字符串和整数)。如果是这样,那么顺序取决于类型名称的字母顺序。

>>> '2' > 3
True

这适用于Python 2.x.在Python 3.x中,这将提升TypeError

答案 1 :(得分:2)

您确定old_positionnew_position是否为整数?使用'2'时,任何对象都可以打印'3'%s ......即使它们以完全不同的方式实现比较。

请尝试%r

答案 2 :(得分:-2)

假设一个理智的比较运算符,old_position != new_position等同于old_position < new_position or old_position > new_position