使用range()读取表格数据时遭遇int与list无法拼接的TypeError求助
问题分析与解决
错误原因
- rows/columns 类型错误:报错信息
can only concatenate list (not "int") to list说明你定义的rows是列表而非整数,直接执行rows + 1属于列表与整数相加,违反语法规则。 - range() 参数错误:
range()函数的参数必须是整数类型,你将rows + 1转为字符串str(rows + 1)传入,会导致类型不匹配。
修正步骤
1. 正确获取整数类型的行数和列数
先确保rows和columns是整数,通常通过获取表格行/列元素列表的长度来实现:
# 获取表格所有行的元素列表,取长度得到总行数 rows = len(driver.find_elements(By.XPATH, "//table[@name='BookTable']/tbody/tr")) # 获取表头的列数(或第一行的列数) columns = len(driver.find_elements(By.XPATH, "//table[@name='BookTable']/tbody/tr[1]/td"))
2. 修正循环中的range()用法
range()的参数必须是整数,直接传入整数即可,无需转为字符串:
# 从第2行开始遍历(跳过表头) for r in range(2, rows + 1): for c in range(1, columns + 1): t1 = driver.find_element(By.XPATH, f"//table[@name='BookTable']/tbody/tr[{r}]/td[{c}]").text print(t1)
这里用f-string拼接XPATH,比字符串相加更简洁易读。
关键说明
- 如果你之前是通过
find_elements获取rows(比如rows = driver.find_elements(...)),此时rows是元素列表,必须用len(rows)获取整数行数。 range(start, end)的end是开区间,所以要写rows + 1才能遍历到最后一行。
内容的提问来源于stack exchange,提问作者Amulya Renduchintala
相关产品推荐
相关产品推荐

