Python3 best way to read unknown multi line input

Viewed 2536

What is the best way in Python 3 to read in multi-line user input when the amount of input is unknown? The multi-line input will be separated by Enter

when I try using

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

I receive an EOFError

Then if I change it to a try-catch block

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

I still get the EOFError.

2 Answers

The EOFError occurs when you call input(), not when you test it, nor when you print it. So that means you should put input() in a try clause:

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

That being said, if input reads from the standard input channel, you can use it as an iterable:

import sys

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

Since every line now ends with the new line character '\n', we can use end='' in the print function, to prevent print a new line twice (once from the string, once from the print function).

I think the last version is more elegant, since it almost syntactically says that you iterate over the stdin and processes the lines individually.

Break the loop if input is blank,

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

produces,

3

3

[Program finished]

If you know the range,

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

produces,

3
4
5
12

[Program finished] 
Related