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

Python中deque触发IndexError索引越界的原因及解决方法

解决IndexError: deque index out of range问题

嘿,我一眼就瞅到你代码里的问题了——你在索引list_id的时候搞混了对象,直接导致了越界错误。咱们拆解下问题根源:

错误原因

当你执行k = de_list_id.popleft()时,k已经是你当初放进deque里的索引值(比如你说的1到list_id长度的数值)。但你后续却用de_list_id[k]来取list_id的元素,这完全是画蛇添足:

  1. 执行popleft()之后,de_list_id的长度已经减少了1,这时候如果k大于等于当前de_list_id的长度,直接就会触发IndexError
  2. 就算没触发错误,de_list_id[k]取到的也不是你要的list_id对应元素,逻辑完全错了

修复代码

你只需要直接用k去索引list_id就行,不需要绕de_list_id这一圈:

from collections import deque

# 先确保de_list_id是正确的索引队列(注意Python列表索引从0开始)
de_list_id = deque(range(len(list_id)))  # 生成0到len(list_id)-1的索引,避免越界

while de_list_id:
    k = de_list_id.popleft()  # 取出队列头部的索引
    current_id = list_id[k]  # 直接用k获取目标ID
    status = check(arg1, arg2, current_id, arg3)
    if status:
        dl_routine(arg1, arg2, current_id, arg3)  # 在线则执行下载
    else:
        de_list_id.append(k)  # 不在线则重新放回队列末尾,等待下次检查

额外提醒

如果你当初创建de_list_id是从1开始的(比如deque(range(1, len(list_id)+1))),那就算修复了上面的问题,list_id[k]还是会触发越界——因为Python列表的索引是从0开始的,最大索引是len(list_id)-1。所以一定要确保de_list_id里存的是0到len(list_id)-1的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:12:57