Python3读取未知多行输入的最佳方法

时间:2017-10-05 18:24:47

标签: python python-3.x input user-input eof

当输入量未知时,Python 3中读取多行用户输入的最佳方法是什么?多行输入将由Enter

分隔

当我尝试使用

while True:
    line = input()
    if line:
          print(line)
    else:
          break

我收到了EOFError

然后,如果我将其更改为try-catch块

while True:
    line = input()
    try:
          print(line)
    except EOFError:
          break

我仍然得到了EOFError。

2 个答案:

答案 0 :(得分:4)

当您致电EOFError 时,会发生 input(),而不是在您进行测试时,也不会在您打印时发生。这意味着您应该input()放入try条款

try:
    line = input()
    print(line)
except EOFError:
    break

话虽如此,如果input从标准输入通道读取,您可以将其用作可迭代:

import sys

for line in sys.stdin:
    print(line, end='')

由于现在每个line都以新的字符'\n'结尾,我们可以在end=''函数中使用print,以防止两次打印新行(一次来自字符串,一次来自print函数。)

我认为最后一个版本更优雅,因为它几乎在语法上表示你遍历stdin并单独处理这些行。

答案 1 :(得分:0)

如果输入为空,则中断循环,

a = []
while True:
   user_input = input()
   if user_input == '':
     break
   else:
       a.append(int(user_input))
       
print(sum(a))

产生,

3

3

[Program finished]

如果你知道范围,

x, *z= [int(input()) for _ in range(3)]
print(x + sum(z))

产生,

3
4
5
12

[Program finished]