EOFError:读取行时出现EOF

发布于 2021-01-29 19:02:11

我试图定义一个函数来使矩形的周长。这是代码:

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

我想我没有留下任何争论或类似的话题。

关注者
0
被浏览
228
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    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的程序来模拟终端,传递1并以2编程方式进行编程。或者,您可以使用argparse在命令行上传递参数,从而允许您使用

    test.py 1 2
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看