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

Python报list index out of range错误,如何检查d的长度及d[index]是否可用?

索引越界原因

你代码中硬编码访问了d[0]到d[23]共24个下标,但BeautifulSoup的find_all返回的子节点列表长度由实际网页结构决定,部分player-data-personal-info节点的直接子节点数量不足24,访问不存在的下标就会触发报错。

解决方法

1. 加长度校验过滤异常节点

如果确认符合要求的节点必须有24个直接子节点,可以在列表推导式中增加长度判断,直接过滤掉子节点数量不足的异常节点:

soup = BeautifulSoup(r.content, "html.parser")
det = soup.find_all('div', class_= 'player-data-personal-info')  
PlayerDetailsResult.extend([
    {                                
            d[0].text.strip(): d[1].text.strip(),
            d[2].text.strip(): d[3].text.strip(),
            d[4].text.strip(): d[5].text.strip(),
            d[6].text.strip(): d[7].text.strip(),
            d[8].text.strip(): d[9].text.strip(),
            d[10].text.strip(): d[11].text.strip(),
            d[12].text.strip(): d[13].text.strip(),
            d[14].text.strip(): d[15].text.strip(),
            d[16].text.strip(): d[17].text.strip(),
            d[18].text.strip(): d[19].text.strip(),
            d[20].text.strip(): d[21].text.strip(),
            d[22].text.strip(): d[23].text.strip(),
    }
    # 增加长度判断,只有子节点数量>=24才处理
    for d in (d.find_all(recursive=False) for d in det) if len(d) >=24
])
j = j+1

2. 动态遍历避免硬编码下标(更推荐)

如果子节点是固定的键值交替结构,直接用步长为2的遍历逻辑自动生成字典,不需要硬编码下标,适配子节点数量不固定的场景:

soup = BeautifulSoup(r.content, "html.parser")
det = soup.find_all('div', class_= 'player-data-personal-info')  
PlayerDetailsResult.extend([
    # 成对遍历子节点,自动生成键值对
    {d[i].text.strip(): d[i+1].text.strip() for i in range(0, len(d), 2)}
    for d in (d.find_all(recursive=False) for d in det)
    # 可选:加校验过滤子节点数量为奇数的异常情况
    if len(d) %2 ==0
])
j = j+1

3. 单个下标可用性判断方法

如果需要单独校验某个下标是否可以访问,只需要判断列表长度是否大于目标下标即可:

target_index = 5
if len(d) > target_index:
    # 下标可用,执行对应操作
    val = d[target_index].text.strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:02