You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发21点游戏时出现NoneType和无效字面量错误如何解决?

问题定位与修复方案

第一个报错:AttributeError: 'NoneType' object has no attribute 'append'

原因

Player类的hand属性默认值设为None,调用append方法时None没有对应方法。另外不能直接将hand的默认值设为[],因为dataclass中可变类型的默认值会被所有实例共享,导致多个玩家共用同一只手牌的逻辑错误。

修复方法

使用field(default_factory=list)定义hand的默认值,让每个实例初始化时自动生成独立的空列表:

from dataclasses import field
# 替换Player类中hand的定义
hand: List[Card] = field(default_factory=list)

第二个报错:ValueError: invalid literal for int() with base 10: 'A'

原因

compute_card_value方法的判断逻辑错误:你拿整个Card类实例和字符串"J"/"Q"/"K"/"A"做比较,永远返回False,所以所有卡牌都会走到else分支尝试将card.rank转成整数,遇到非数字的牌面就会报错。

修复方法

判断时取Card实例的rank属性做对比:

def compute_card_value(self, card):
    # 取card.rank判断,而不是card本身
    if card.rank in ["J", "Q", "K"]:
        value = 10
    elif card.rank == "A":
        if self.values > 10:
            value = 1
        else:
            value = 11
    else:
        value = int(card.rank)
    return value

额外需要修正的逻辑问题

你当前代码中Dealer类的缩进错误,被定义成了Player的内部类,应该调整缩进和Player同级,否则初始化和继承逻辑都会异常。


内容的提问来源于stack exchange,提问作者Alex B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:09:01