TypeError:比较没有返回int

时间:2014-05-30 06:41:26

标签: python comparison

我正在用python实现一些东西,特别是一个类的 cmp 方法,这里是:

def __cmp__(self, other):
    if self.time < other.get_time():
        return -1
    if self.time > other.get_time():
        return 1
if self.type == A and other.get_type() == D:
        return -1
if self.type == D and other.get_type() == A:
    return 1
if self.person < other.get_person():
    return -1
if self.person > other.get_person():
    return 1
return 0

我在运行程序时遇到此错误:

Traceback (most recent call last):
File "wp-proj03.py", line 292, in <module>
    main()
File "wp-proj03.py", line 180, in main
    events.put(e)
File "/usr/lib/python2.7/Queue.py", line 136, in put
    self._put(item)
File "/usr/lib/python2.7/Queue.py", line 225, in _put
    heappush(self.queue, item)
TypeError: comparison did not return an int

如您所见,我正在使用队列,特别是优先级队列(来自内置的Queue.py模块)。当我尝试将我的类的实例放入队列时,它会抛出此错误。

有人可以告诉我比较方法有什么问题吗?或者它可能是其他地方的问题?

THX

1 个答案:

答案 0 :(得分:0)

可能由于其他评论者提到的缩进问题,您的 cmp 函数实际上并不包含最终的return语句,因此在self.time == other.get_time()None的情况下返回(退出函数的默认返回值,没有显式return),而不是__cmp__预期的整数。