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

Python3 best way to read unknown multi line input

Python3 在输入量未知时读入多行用户输入的最佳方法是什么?多行输入将以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。

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' 结束,我们可以在 print 函数中使用 end='' 来防止打印换行两次(一次来自字符串,一次来自 print 函数)。

我认为最后一个版本更优雅,因为它几乎在语法上说你迭代 stdin 并单独处理行。

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

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]