EOFError: 读取一行时出现 EOF

新手上路,请多包涵

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

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

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

原文由 Chimp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 535
2 个回答
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

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

所以一个简单的管道,比如我使用的那个,只允许你传递一个字符串。因此,您只能调用 input() 一次。然后您必须处理这个字符串,将其拆分为空格,然后自己将字符串片段转换为整数。那是什么

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

做。

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

test.py 1 2

原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 try / except 块来消除 EOF 错误。

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

原文由 Saurabh Raj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题