

下記のコードで空行が入力されるまで標準入力を受け付けたいのですが、改行のみを入力しても処理が終了しません。  
入力を終了させる方法を教えていただきたいです。  
よろしくお願いします。

[code]

    def get_input():
        while True:
            try:
                yield ''.join(input())
            except EOFError:
                break
    
    if __name__ == '__main__':
        a = list(get_input()) # [a1, a2, a3, ...]
    
[/code]

環境：  
MacOSX10.12.6  
python3.5.1


CC BY-SA 3.0
2017-08-19T04:45:11.743
37327
2017-08-21T08:40:16.300
2017-08-21T08:40:16.300
3054
24944
question
python python3
python3 で input に対する空行の入力を判定したいが EOFError が発生しない


改行するだけでは EOF は発生しません。空行を認識させたいのであれば、EOFError ではなく別の方法を使う必要があります。

「空行まで1行ずつ読み込みたい」という意図では、たとえば以下のコードが参考になると思います。

[code]

    def get_input():
        while True:
          try:
            line = input()  # Python 2.x と Python 3.x で input() の挙動が異なるので注意
            if line == '':  # 空行の場合、line の中身は空文字列
              break
            else:
              yield line
          except EOFError:
            break
    
    if __name__ == '__main__':
        a = list(get_input())
        print(a)
    
[/code]

* * *

補足： EOFError についてですが、macOS のターミナルの場合、`Control`+`D` を押すことで EOF
を伝えることができます([参考](https://stackoverflow.com/q/21364313/5989200))。

たとえば次のように入力すると、EOFError が発生し、質問文にある元々のプログラムは終了します。

[code]

    aaa
    bbbbbbb
    cc
    # ここで Control+D を押し、必要なら改行する
    
[/code]

また、end of file というくらいなので、ファイルから入力することも可能です。

[code]

    $ cat input.txt
    aaa
    bbbbbbb
    cc
    $ python example.py < input.txt
    
[/code]


CC BY-SA 3.0
2017-08-20T10:09:54.973
37352
2017-08-20T10:22:24.257
2017-08-20T10:22:24.257
19110
19110
37327
answer