如何实现总分数输出?添加int后遇ValueError报错求助
问题解决:修复CSV学生总分计算的报错
错误根源
你的代码存在两个核心问题引发报错:
- 缩进错误:
with语句块执行完毕会自动关闭文件,但你的for循环写在了with块外部,此时遍历data时文件已关闭,触发"I/O operation on closed file"错误。 - Reader类型误用:
csv.reader返回的是列表形式的行数据,无法通过row['Math']这种字典键的方式访问列,必须使用csv.DictReader才能按列名索引。
修正后的代码
import csv with open("./student_grades.csv", newline='') as csvfile: # 替换为DictReader,支持按列名访问数据 data = csv.DictReader(csvfile) print("Banner Total Grade") print("---------------------------------") # 所有文件操作逻辑放在with块内,保证文件处于打开状态 for row in data: # 转换为int类型并计算总分 total_grade = int(row['Math']) + int(row['Physics']) + int(row['Chemistry']) + int(row['Biology']) print(row['banner'], total_grade)
额外提示
- 确保你的CSV文件第一行是列名(例如
banner,Math,Physics,Chemistry,Biology),DictReader才能正确识别列名映射关系。 - 如果CSV中存在缺失值或非数字格式的分数,可能会再次触发
ValueError,可以添加异常处理避免程序崩溃:
try: total_grade = int(row['Math']) + int(row['Physics']) + int(row['Chemistry']) + int(row['Biology']) except ValueError: print(f"警告:{row['banner']}的分数格式异常,跳过计算") continue
内容的提问来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

