EOFError:行を読むときにEOF?

基本的には、ある行に特定のパターンが現れるかどうかをチェックしなければならない。もしそうなら、その行を表示しなければならない。これが私のコードだ:

p = input()
 while 1:
   line = input()
   a=line.find(p)
   if a!=-1:
     print(line)
   if line=='':
     break

このコードは正しい答えとして受け入れられています。しかし、引っ掛かりがあります。ランタイムエラーEOFError:EOFError:EOFというランタイムエラーが発生します。

質問が3つあります:

  1. なぜ見落とされるのか?
  2. どうすればこのエラーを取り除けますか?
  3. 問題を解決する良い方法はありますか?

何も見落としはない。ドキュメント]1 にあるように、input はファイル終了条件にぶつかると EOFError を発生させる。基本的に、input は、これ以上読むものがないことを知らせる。この例外が発生するのを待ち、例外が発生したら関数から戻るか、プログラムを終了する。

def process_input():
    p = input()
    while True:
        try:
            line = input()
        except EOFError:
            return
        a = line.find(p)             
        if a != -1:
            print(line)
        if line=='':
            return
解説 (1)