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

Python目标检测运行报IndexError列表索引越界问题求助

错误排查及解决方法

1. 核心报错原因:coco.names文件读取逻辑错误

你当前读取分类名的代码存在字符转义错误:

with open(classFile,'rt') as f:
    classNames = f.read().rstrip('n').split('n')

这里的'n'应该是换行符'\n',缺失了反斜杠转义符,导致你没有按行拆分coco.names的内容,所有分类名被当成了一个字符串存在classNames列表里,列表长度仅为1。当检测返回的classId大于1时,classId-1就会超出列表索引范围,触发本次IndexError报错。
修正后的代码为:

with open(classFile,'rt') as f:
    classNames = f.read().rstrip('\n').split('\n')

2. 其他需要修正的代码问题

你当前的代码还有两处缩进逻辑错误,虽然不会直接触发本次报错,但会导致后续运行异常:

  • 读取coco.names的with代码块结束后,后续模型初始化、摄像头循环的代码都错误缩进在了with块内部,属于不规范写法,可能引发资源读取异常
  • cv2.imshow和cv2.waitKey方法错误缩进在了for循环内部,会导致每一帧识别到多个物体时重复刷新窗口,建议调整到for循环外层,和if len(classIds) != 0:判断同级

3. 校验方法

你可以在读取完classNames后添加一行打印代码,确认分类列表长度是否正确:

print(len(classNames), classNames)

标准COCO数据集有80个分类,正常打印长度应为80,如果长度不符,检查你的coco.names文件是否完整、是否和代码放在同一目录下即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:39:06