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

Python cChallenge类实例列表用列表推导式访问Id报AttributeError问题

问题原因

该报错的核心原因是 cList 列表中不全是 cChallenge 类的实例,混杂了 cChallenge 类本身的引用:

  • Id 是定义在 __init__ 中的实例属性,只有实例化后的 cChallenge 对象才拥有该属性
  • 当列表推导式遍历到 cChallenge 类对象时,就会触发 AttributeError: type object 'cChallenge' has no attribute 'Id' 异常
  • 单独访问 cList[1].Id 正常,是因为索引为1的元素是合法实例,其他位置的元素存在类对象
解决方法
  • 优先排查 cList 的填充逻辑,找到误将类本身加入列表的代码。最常见的错误是实例化时漏写构造方法括号:
    错误写法:
    cList.append(cChallenge)
    
    正确写法:
    # 传入对应参数生成实例后再加入列表
    cList.append(cChallenge(Id=380, Title="示例题目"))
    
  • 若需要临时兼容异常情况,可在列表推导式中增加属性存在性判断,过滤异常元素:
    print([x.Id for x in cList if hasattr(x, 'Id')])
    
  • 若要定位具体混入类对象的位置,可执行调试代码逐一枚举元素类型:
    for idx, item in enumerate(cList):
        print(f"索引{idx} 元素类型:{type(item)}")
    
    类对象的输出为 <class '__main__.cChallenge'>,实例的输出为 <__main__.cChallenge object at 内存地址>,可快速定位错误位置。

内容的提问来源于stack exchange,提问作者Lorenzo Monaco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:03