Python读取Excel测试用例时出现list index out of range错误该如何解决?

Python读取Excel测试用例时出现list index out of range错误该如何解决?
最新回答
一花一树开

2026-10-21 13:45:49

出现list index out of range错误的原因是代码未检查Excel行数据的列数是否足够,导致尝试访问不存在的列索引(如第5列或第6列)。 以下是具体分析和解决方案:

错误原因
  1. 列索引越界:

    Excel表格中某行的数据列数不足6列(索引从0开始,第5列索引为5)。

    当casename匹配到该行时,代码仍尝试访问cell_value(indx, 4)或cell_value(indx, 5),引发索引越界。

  2. 循环逻辑缺陷:

    原代码通过indx手动递增索引,但未验证目标行是否存在足够的列数。

    若casename出现在最后一行且该行列数不足,indx可能超出有效范围。

解决方案
  1. 添加列数检查:在访问单元格前,验证目标行的列数是否足够(至少6列)。

    使用sheet.row_len(rowx)获取指定行的列数。

    结合sheet.nrows确保行索引有效。

  2. 优化循环结构:使用enumerate替代手动递增索引,提升代码可读性。

修改后的代码import xlrddef get_excel(info, sheetname, casename): testcase_excel = xlrd.open_workbook(info, formatting_info=True) testcase = testcase_excel.sheet_by_name(sheetname) response_list = [] for indx, one in enumerate(testcase.col_values(0)): # 使用enumerate获取索引和值 if casename in one: # 检查行是否存在且列数足够(至少6列) if testcase.nrows > indx and testcase.row_len(indx) > 5: requests_body = testcase.cell_value(indx, 4) response_data = testcase.cell_value(indx, 5) response_list.append((requests_body, response_data)) else: print(f"警告:行 {indx} 列数不足,跳过处理。") return response_listif __name__ == '__main__': res = get_excel('../data/python测试用例.xls', '登录', 'login') print(res)关键修改点
  • 列数检查:if testcase.nrows > indx and testcase.row_len(indx) > 5确保行索引有效且目标行列数足够(第5列和第6列存在)。

  • 错误处理:添加警告信息,便于调试时定位问题行。

  • 代码简洁性:使用enumerate替代手动递增indx,减少潜在错误。

其他建议
  1. 使用openpyxl替代xlrd:

    xlrd已停止支持.xlsx格式,推荐使用openpyxl处理新版Excel文件。

    示例代码(需安装openpyxl):from openpyxl import load_workbookdef get_excel_openpyxl(info, sheetname, casename): wb = load_workbook(info) sheet = wb[sheetname] response_list = [] for row in sheet.iter_rows(min_col=1, max_col=6): # 限制列范围 if casename in row[0].value: # 第一列(索引0)匹配用例名 requests_body = row[4].value # 第5列(索引4) response_data = row[5].value # 第6列(索引5) response_list.append((requests_body, response_data)) return response_list

  2. 数据预处理:

    在Excel中统一测试用例格式,确保每行列数一致。

    使用数据验证功能限制列数,避免人为输入错误。

  3. 日志记录:

    添加日志模块(如logging),记录跳过的行或错误信息,便于后续分析。

通过以上修改,可有效避免list index out of range错误,并提升代码的健壮性和可维护性。