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

函数调用出现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}')

修改要点

  1. 避免重复读取输入:只调用一次input()获取输入字符串,处理成float列表后再传入函数,彻底解决EOFError。
  2. 对齐函数逻辑与类型标注:函数现在直接接收float列表,不再在内部处理字符串拆分,符合类型提示的要求,职责更明确。
  3. 优化代码可读性:将函数返回的两个值一次性解包到变量中,再分别打印,代码更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:25:23