Python3读取未知多行输入的最佳方式
当输入量未知时,Python 3中读取多行用户输入的最佳方式是什么?多行输入将通过回车Python3读取未知多行输入的最佳方式
当我尝试使用
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()
时,而不是当您测试它时,或打印它时。因此,这意味着你应该在try
条款把input()
:
try:
line = input()
print(line)
except EOFError:
break
话虽这么说,如果input
从标准输入通道读取,你可以使用它作为一个迭代:
import sys
for line in sys.stdin:
print(line, end='')
由于每line
现在以新行字符'\n'
结束,我们可以在print
函数中使用end=''
,以防止打印新行两次(一次来自字符串,一次来自print
有趣ction)。
我认为最后一个版本更优雅,因为它几乎在语法上表示您遍历了stdin
并单独处理这些行。
但是最后一行可能会导致问题,不是吗?模仿'input()'确切可能是微妙的 – Elazar
@Elazar:基于输入的[documentation](https://docs.python.org/3/library/functions.html#input),它从stdin读取,剥离新线,并返回。如果它有一个EOF字符,会引发一个'EOFError'。这与迭代器协议在stdin中的作用是一样的(除了它在EOF的情况下终止循环,并且它不剥除新行)。 –
这是合乎逻辑的,因为打印时不会发生错误,但是在input()处。所以这应该在'try'中。 –
你是从标准输入管道输入数据吗?我从来没有看到EOFError调用'input',但我想这是可能的。 –
@AdamSmith:是的,如果你在大多数终端中使用Ctrl + D,这也可以看作是stdin的终结。 –