如何解决列表循环中索引值相乘时int转换报错问题以获得合计值
错误原因
- 直接触发报错的原因:
int()方法无法直接转换带小数点的字符串,你CSV文件的第2、3列(下标1、2)存在95.7这类浮点格式的字符串数据,直接传入int()就会触发该异常。 - 代码隐藏逻辑错误:你写的
counter =+ 1是错误写法,等价于每次循环都将counter赋值为1,无法正确统计数据行数,最终计算的平均值结果也会出错。
解决方案
如果业务允许对浮点数值取整后计算,可先将字符串转换为float类型再转int;如果需要保留小数精度,直接转换为float参与计算即可。如果要避免脏数据导致程序崩溃,可增加异常捕获逻辑,跳过不符合格式的数据行。
修正后代码示例
import csv counter = 0 sum_total = 0 with open('sales_data_sample (3).csv','r', encoding='utf-8') as csv_file: csv_reader = csv.reader(csv_file) next(csv_reader) for lines in csv_reader: try: # 需保留小数就把int()去掉,直接用float()转换 col1 = int(float(lines[1])) col2 = int(float(lines[2])) except (ValueError, IndexError): # 遇到格式错误/列缺失的行直接跳过 continue counter += 1 sum_total += col1 * col2 avg = sum_total / counter if counter > 0 else 0
补充说明
- 原代码里的变量名
sum是Python内置函数名,不建议作为自定义变量使用,避免命名冲突。 - 增加文件编码指定可以避免部分系统读取CSV时出现乱码问题,可根据你的CSV实际编码调整为
gbk等其他编码。
内容的提问来源于stack exchange,提问作者user17121268
相关产品推荐
相关产品推荐

