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位有效数字,不符合平均分常规的两位小数输出需求;直接打开文件未做关闭处理,存在资源泄漏风险。
修复方案
- 明确两个函数的职责边界:
average_grades仅负责接收成绩列表,返回计算后的平均分,删除内部反向调用averages的冗余逻辑。 - 精简
averages的参数列表,仅保留单行文本line作为入参;处理文本提取出姓名、成绩列表后,调用average_grades获取平均分再执行打印,不需要将函数本身作为参数传入。 - 用
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
相关产品推荐
相关产品推荐

