2017-10-05 6 views
2

입력 값을 알 수 없을 때 멀티 라인 사용자 입력에서 읽는 가장 좋은 방법은 무엇입니까? 멀티 라인 입력 I가 Python3 알 수없는 멀티 라인 입력을 읽는 가장 좋은 방법

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

사용하여 시도 들어가면 의해 분리한다 I는 I try-catch 블록

while True: 
    line = input() 
    try: 
      print(line) 
    except EOFError: 
      break 
로 변경할 경우에서 EOFError

나타날

나는 아직도 EOFError를 얻는다.

+2

오류는 인쇄시 발생하지 않으므로 논리적입니다. 'input()'. 그래서 그것은'try'에 있어야합니다. –

+0

stdin에서 데이터를 파이프합니까? 나는 EOFError가'input '을 호출하는 것을 본 적이 없지만 가능하다고 생각합니다. –

+0

@AdamSmith : 그렇습니다. 대부분의 터미널에서'Ctrl + D '를 사용하면 stdin을 종료하는 것으로 간주됩니다. –

답변

4

EOFErrorinput()으로 전화 할 때 발생하며 테스트 할 때나 인쇄 할 때 발생하지 않습니다. input 표준 입력 채널에서 읽는 경우

말했다되고 그건
try: 
    line = input() 
    print(line) 
except EOFError: 
    break

, 당신이 반복자로 사용할 수 있습니다 :

import sys 

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

이후 그래서 당신이 tryinput()을 넣어한다는 뜻 모든 line은 이제 새 줄 문자 '\n'으로 끝나고 print 함수에서 end=''을 사용하여 새 줄을 두 번 인쇄하지 못하도록합니다 (한 번은 문자열에서 한 번, 한 번은 print 재미에서 ction).

나는 문법적으로 거의 stdin을 반복하고 라인을 개별적으로 처리한다고 말하기 때문에 마지막 버전이 더 우아하다고 생각합니다.

+0

하지만 마지막 줄이 문제를 일으킬 수 있지 않을까요? 'input()'을 정확히 모방하는 것은 미묘합니다. – Elazar

+0

@Elazar : 입력의 [documentation] (https://docs.python.org/3/library/functions.html#input)에 기초하여 표준 입력을 읽습니다. 새 줄을 제거하고 그 줄을 반환합니다. EOF 문자가있는 경우 'EOFError'를 발생시킵니다. 이것은'stdin'에 대한 iterator 프로토콜이하는 것과 동일합니다 (EOF의 경우 루프를 종료하고 새로운 라인을 제거하지 않는다는 것을 제외하고). –