为什么比较没有返回int

时间:2016-06-20 18:40:08

标签: python python-2.7 typeerror

我正在制作简单的老女佣游戏。这是我职业选手的课程:

class OldMaidHand(Hand):
    def removeMatches(self):
        count=0;
        originalCards=self.cards[:];
        for card in originalCards:
            match=Card(3-card.suit,card.rank);
            if match in self.cards:
                self.cards.remove(card);
                self.cards.remove(match);
                print "Hand %s: %s matches %s "%(self.name,card,match);
                count=count+1;
            return count;`

但它显示以下错误:

  

TypeError:比较没有返回int。

以下是__cmp__()类中的Card方法。

    def __cmp__(self,other):
        if self.suit>other.suit:
            return 1
        if self.suit<other.suit:
            return -1
        if self.rank>other.rank:
            return 1
        if self.rank<other.rank:
            return -1

1 个答案:

答案 0 :(得分:1)

来自documentation for __cmp__

  

如果未定义丰富的比较(见上文),则通过比较操作调用。如果self&lt;返回负整数其他,如果自我为零==其他,如果自我为正整数>其他

换句话说,正如你的错误所说,它应该在任何情况下返回一个整数。

如果你的if条件都没有获得,你的__cmp__将“脱离函数的末尾”,返回None,这是任何没有明确返回其他东西的Python函数的默认值。这是您的错误的来源(因为None不是整数)。

我没有仔细检查你的代码,但似乎你忽略了秩和西装都相等的情况。也许作为一个失败保障,你应该在函数结束时简单地return 0,除非你发现你的条件没有得到满足但卡不相等的情况。