簡體   English   中英

EOFError:讀取一行時的EOF

[英]EOFError: EOF when reading a line

我正在嘗試定義一個函數來制作矩形的周長。 這是代碼:

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

我想我沒有留下任何爭論或類似的東西。

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 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沒有問題。 或者,您可以使用pexpect編寫一個程序來模擬終端,以編程方式傳遞12 或者,您可以使用argparse在命令行上傳遞參數,從而允許您使用

test.py 1 2

**最好是使用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="")

將您的輸入轉換為整數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM