函数调用出现EOFError: EOF when reading a line错误,求修正方案
问题描述
我写了个接收数字列表、返回总和与乘积的函数,但运行时两个print语句没法正常工作——只能输出其中一个,另一个会触发EOFError: EOF when reading a line错误。相关代码、输入和预期输出如下:
原代码
from typing import List, Tuple import math from functools import reduce import operator def sum_and_product(numbers: List[float]) -> Tuple[float, float]: a = numbers.split(" ") b = list(map(float, a)) c = math.fsum(b) d = reduce(operator.mul, b, 1) return c, d print(f'Sum:{sum_and_product(input())[0]:>8.2f}') print(f'Product:{sum_and_product(input())[1]:>8.2f}')
输入
1.5 2.0 4.0
预期输出
Sum: 7.50 Product: 12.00
解决方案
问题根源
两次调用input()是核心问题:第一次读取完输入内容后,第二次调用时已经没有剩余输入可读,直接触发EOFError。另外函数的类型标注是接收List[float],但实际传入的是字符串,逻辑和标注不匹配。
修改后的代码
from typing import List, Tuple import math from functools import reduce import operator def sum_and_product(numbers: List[float]) -> Tuple[float, float]: total_sum = math.fsum(numbers) total_product = reduce(operator.mul, numbers, 1) return total_sum, total_product # 仅读取一次输入,处理成符合要求的数字列表 input_content = input() number_list = list(map(float, input_content.split())) sum_result, product_result = sum_and_product(number_list) print(f'Sum:{sum_result:>8.2f}') print(f'Product:{product_result:>8.2f}')
修改要点
- 避免重复读取输入:只调用一次
input()获取输入字符串,处理成float列表后再传入函数,彻底解决EOFError。 - 对齐函数逻辑与类型标注:函数现在直接接收float列表,不再在内部处理字符串拆分,符合类型提示的要求,职责更明确。
- 优化代码可读性:将函数返回的两个值一次性解包到变量中,再分别打印,代码更简洁直观。
内容的提问来源于stack exchange,提问作者Disobey1991
相关产品推荐
相关产品推荐

