如何改进Python代码避免索引越界问题(附代码求助)
解决索引越界问题与代码优化
核心问题分析
- 硬编码索引
[1][2][3]会在列表长度不足时触发IndexError; - 重复调用
soup3.find(...)浪费性能,DOM解析会重复执行; zip(a,b,c)逻辑错误:a/b/c是单个<li>元素,zip会迭代元素的文本字符而非预期的元素内容;- 裸
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
相关产品推荐
相关产品推荐

