You need to enable JavaScript to run this app. Python读取CSV提取最高成绩时触发data未定义错误,求代码修复
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 23:15:01