EOFError:读取一行时的EOF

时间:2013-07-16 11:56:42

标签: python python-3.x

我正在尝试定义一个函数来制作矩形的周长。这是代码:

width = input()
height = input()
def rectanglePerimeter(width, height):
   return ((width + height)*2)
print(rectanglePerimeter(width, height))

我想我没有留下任何论据或类似的东西。

3 个答案:

答案 0 :(得分:11)

width, height = map(int, input().split())
def rectanglePerimeter(width, height):
   return ((width + height)*2)
print(rectanglePerimeter(width, height))

像这样运行会产生:

% echo "1 2" | test.py
6

我怀疑IDLE只是将一个字符串传递给你的脚本。第一个input()正在扼杀整个字符串。请注意,如果在调用input()之后放入一些打印语句会发生什么:

width = input()
print(width)
height = input()
print(height)

正在运行echo "1 2" | test.py生成

1 2
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 5, in <module>
    height = input()
EOFError: EOF when reading a line

请注意,第一个print语句打印整个字符串'1 2'。第二次调用input()会引发EOFError(文件结束错误)。

因此,我使用的简单管道只允许您传递一个字符串。因此,您只能拨打input()一次。然后,您必须处理此字符串,将其拆分为空格,并自行将字符串片段转换为int。这就是

width, height = map(int, input().split())

确实

注意,还有其他方法可以将输入传递给您的程序。如果您在终端中运行test.py,那么您可以单独键入12,没有任何问题。或者,您可以使用pexpect编写一个程序来模拟终端,并以编程方式传递12。或者,您可以使用argparse在命令行上传递参数,允许您使用

调用程序
test.py 1 2

答案 1 :(得分:0)

将输入转换为整数:

width = int(input())
height = int(input())

答案 2 :(得分:0)

**最好是使用try除块来摆脱EOF **

try:
    width = input()
    height = input()
    def rectanglePerimeter(width, height):
       return ((width + height)*2)
    print(rectanglePerimeter(width, height))
except EOFError as e:
    print(end="")