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

如何改进Python代码避免索引越界问题(附代码求助)

解决索引越界问题与代码优化

核心问题分析

  1. 硬编码索引[1][2][3]会在列表长度不足时触发IndexError;
  2. 重复调用soup3.find(...)浪费性能,DOM解析会重复执行;
  3. zip(a,b,c)逻辑错误:a/b/c是单个<li>元素,zip会迭代元素的文本字符而非预期的元素内容;
  4. 裸except会隐藏所有异常,不利于调试。

解决方案与优化点

  • 安全访问索引:先获取所有目标<li>元素,通过判断列表长度或try-except避免越界;
  • 复用DOM查询结果:将重复的查找操作提取为变量,减少重复解析;
  • 修正逻辑错误:直接提取目标位置的元素文本,无需错误的zip循环;
  • 精准异常捕获:只捕获特定异常(如IndexError、AttributeError),避免隐藏未知问题;
  • 鲁棒性处理:处理find返回None的情况(即找不到目标<ul>的场景)。

优化后的完整代码

import pandas as pd

# 先获取目标ul,处理找不到的情况
target_ul = soup3.find('ul', class_="list m-b-0")
if not target_ul:
    print("未找到目标ul元素")
    data = []
else:
    # 获取所有符合条件的li元素
    list_items = target_ul.find_all('li', class_="list-item p-a-0")
    cast_data = []
    
    # 安全访问索引1、2、3,避免越界
    for idx in [1, 2, 3]:
        try:
            # 获取对应位置的li文本,strip()去除多余空格
            text = list_items[idx].get_text(strip=True)
            cast_data.append(text)
        except IndexError:
            # 索引不存在时,用None作为缺失值保留结构,也可选择跳过
            cast_data.append(None)
    
    data = [cast_data]

# 生成DataFrame并保存(修改文件名更清晰,关闭冗余索引)
df = pd.DataFrame(data)
df.to_csv('cast_info.csv', index=False)
print(df)

额外说明

  • 如果页面存在多个目标<ul>元素,需要用find_all遍历每个ul,再重复上述逻辑;
  • 用None填充缺失值,能让DataFrame保留完整的列结构,便于后续数据清洗;
  • get_text(strip=True)可以自动去除文本前后的空格和换行符,让数据更干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:40:14