Python读取CSV提取最高成绩时触发data未定义错误,求代码修复
data is not defined 报错定位与功能修复 核心报错触发原因
Python 以缩进作为代码块划分规则,原代码缩进层级完全错乱:
read_csv_data函数定义完成后,内部需要执行的data = []没有缩进归到函数作用域内- 后续循环遍历、
data.append(row)语句因为缩进错位,执行时解释器找不到已定义的data变量,直接抛出未定义错误
关联功能Bug排查(修复报错后仍会触发的问题)
- 缺少返回值:
read_csv_data读完全部数据后没有return语句,外部接收的结果为None,无法进入后续成绩计算流程 - 函数嵌套位置错误:
find_max函数被错误缩进嵌入到read_csv_data的循环块内,且函数的return语句缩进在循环体内部,会在第一次遍历学生记录时就直接返回,无法覆盖全量数据查找最高分 - 最高分逻辑失效:
find_max中max_grade初始值设为200,远高于常规考试满分阈值,所有真实成绩都无法触发最高分更新,最终返回空值 - 语法错误:
write_top_grade中newline=+' '是非法Python语法,运行时会直接抛出语法异常 - 文件数据损坏风险:
write_top_grade直接以覆盖写模式打开原始CSV文件,会把全部源成绩数据清空破坏 - 无异常兜底:如果CSV首行是表头、或某行成绩列不是有效数字,转换浮点数时会触发类型错误,程序崩溃
修复后可正常运行的完整代码
import csv # 列索引常量,匹配CSV字段位置 FIRST_NAME_IDX = 0 SURNAME_IDX = 1 GRADE_IDX = 2 def read_csv_data(file_path): student_records = [] # 修正缩进,将数据列表归到函数作用域内 with open(file_path, mode='r', encoding='utf-8') as csv_file: records = csv.reader(csv_file, delimiter=',') # 跳过首行表头,避免类型转换错误 next(records, None) for row in records: if row: student_records.append(row) # 补充返回值,将读取到的全量记录传递给外部流程 return student_records def find_top_student(student_grades): # 将初始最高分设为-1,确保所有正分成绩都能参与比较 max_grade = -1 top_student = None for record in student_grades: # 增加异常兜底,跳过无效数据行 try: current_grade = float(record[GRADE_IDX]) except (ValueError, IndexError): continue if current_grade > max_grade: max_grade = current_grade top_student = record # 将return语句移到循环外,确保遍历完全部记录后再返回结果 return top_student def write_top_result(output_path, top_student): if not top_student: print("未读取到有效学生成绩") return result_content = f"{top_student[FIRST_NAME_IDX]} {top_student[SURNAME_IDX]} {top_student[GRADE_IDX]}" # 控制台输出结果 print(result_content) # 写入独立结果文件,不覆盖原始成绩CSV with open(output_path, 'w', encoding='utf-8') as result_file: result_file.write(result_content) if __name__ == "__main__": source_csv = "UASHSDDP1efiles.csv" all_students = read_csv_data(source_csv) top_stu = find_top_student(all_students) write_top_result("top_grade_result.txt", top_stu)
内容的提问来源于stack exchange,提问作者Connor McPike
相关产品推荐
相关产品推荐

