You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python拆分多函数后出现averages()参数缺失TypeError报错

报错原因

该缺参数报错由代码中多处逻辑问题引发,核心问题如下:

  • 函数定义与调用的参数不匹配:averages函数定义时声明需要line、average_grades2个位置参数,但主循环中调用averages(line)时仅传入1个参数,直接触发本次TypeError。
  • 函数调用逻辑错位:两个函数出现错误的互相调用:averages中调用average_grades时传入了2个参数,但average_grades定义时仅接收1个成绩列表参数;average_grades计算完分数后又反向调用averages,形成无意义递归,逻辑完全混乱。
  • 变量作用域错误:average_grade是average_grades函数内的局部变量,averages函数中直接引用该变量会触发变量未定义错误。
  • 细节实现问题:格式化字符串使用{:.2}是保留2位有效数字,不符合平均分常规的两位小数输出需求;直接打开文件未做关闭处理,存在资源泄漏风险。
修复方案
  1. 明确两个函数的职责边界:average_grades仅负责接收成绩列表,返回计算后的平均分,删除内部反向调用averages的冗余逻辑。
  2. 精简averages的参数列表,仅保留单行文本line作为入参;处理文本提取出姓名、成绩列表后,调用average_grades获取平均分再执行打印,不需要将函数本身作为参数传入。
  3. 用with语句处理文件读写,自动释放文件资源;将平均分的格式化占位符修正为{:.2f},输出两位小数。

修复后可正常运行的完整代码:

def averages(line):
    if not line:
        return
    name_grades = line.split('_')
    student_name = name_grades[0]
    grades = [float(n) for n in name_grades[-1].split()]
    average_grade = average_grades(grades)
    print('{} has an average grade of {:.2f}'.format(student_name, average_grade))


def average_grades(grades):
    return sum(grades) / len(grades)


print("Report for group 2b")
with open('geo_grades_1_input.txt', 'r', encoding='utf-8') as f:
    for line in f.read().splitlines():
        averages(line)
print("End of report")

内容的提问来源于stack exchange,提问作者Hoi2021

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:24:22