Python报错:'Deck'对象无split()属性,求技术解决方案
错误根源分析
从你的错误栈信息里能直接定位问题核心:
File "/home/andypaling/Documents/Programming/python/random/card_game/game.py", line 87, in check_same_cards
if card1.get_card_value(card1) == card2.get_card_value(card2):
你调用get_card_value时,传入的参数是card1和card2——也就是Deck类的实例对象,但你的方法定义里,new_card参数预期是字符串类型的卡牌名称(比如'Two of Hearts')。当方法执行到new_card.split()时,自然会报错,因为Deck对象根本没有split这个字符串专属方法。
修正方案
修正调用时的传参
你需要传入正确的字符串卡牌值,而不是Deck对象本身。结合你的调用上下文(check_same_cards(player1_deck, player2_card)),推测你应该是想把player2_card(以及player1_deck对应的卡牌)传入方法,而不是card1/card2自身。修正后的调用代码应该类似:if card1.get_card_value(player1_card) == card2.get_card_value(player2_card):(具体要根据你的Deck类结构调整,比如如果Deck有存储卡牌的列表属性
cards,可能需要写成card1.cards[0]这类形式来获取字符串卡牌)添加参数类型检查(可选但推荐)
为了避免后续再出现类似的参数类型错误,可以在get_card_value方法里加入类型校验,提前抛出更清晰的错误提示:# returns integer value of a card def get_card_value(self, new_card): if not isinstance(new_card, str): raise TypeError(f"Expected a string for new_card, got {type(new_card).__name__} instead") return self.values[new_card.split()[0]]
这样就能解决你遇到的AttributeError问题啦。
内容的提问来源于stack exchange,提问作者andypaling1

