我正在用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
答案 0 :(得分:0)
可能由于其他评论者提到的缩进问题,您的 cmp 函数实际上并不包含最终的return语句,因此在self.time == other.get_time()
,None
的情况下返回(退出函数的默认返回值,没有显式return
),而不是__cmp__
预期的整数。