You need to enable JavaScript to run this app. 触发TypeError:'set' object is not subscriptable报错如何排查解决
优惠活动
大模型
产品
解决方案
定价
更多

触发TypeError:'set' object is not subscriptable报错如何排查解决

错误根因

你遇到的TypeError: 'set' object is not subscriptable错误本质是类型不匹配:

  • 当模板匹配成功时,TryToFindCardInGame返回max_loc,这是cv2.minMaxLoc输出的元组类型,支持[0]下标访问
  • 当模板匹配失败时,你返回的是{-1, -1},这是Python的集合(set)类型,集合是无序且不支持下标索引的,当你调用pos[0]时就会触发报错
排查修复方向
  • 首先修正失败场景的返回值类型:把TryToFindCardInGame最后一行的return {-1, -1}改为return (-1, -1),统一返回元组类型,和成功场景的返回格式保持一致
  • 增加返回值类型校验:在CatchingCard函数拿到pos之后、访问下标前,增加类型校验逻辑,比如if not isinstance(pos, (tuple, list)): 提前抛出更明确的报错,方便后续调试定位
  • 清理无效代码:TryToFindCardInGame里的assert isinstance(max_val, object)、assert isinstance(cardImage.thumbnail, object)这两行断言永远为真(所有Python对象都属于object子类),单独写的cardImage.thumbnail、colorLayout.shape[::-1]也没有执行任何实际操作,这些冗余代码可以直接删除,避免干扰调试
  • 补充边界场景测试:专门测试卡片匹配失败的场景,验证修改后的逻辑是否正常运行,比如传入不存在的卡片路径测试返回值处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 15:36:09