私のpythonプログラムには2つの呼び出しがありますraw_input()
1 つ目raw_input()
は、ユーザーから複数行の入力を取得することです。ユーザーは、入力を終了するために Ctrl+D (Windows では Ctrl+Z) を発行できます。
2番目raw_input()
は、(y/n)タイプのプロンプトでユーザーから別の入力を受け取る必要があります。
残念ながら (Mac OS X のみ?)、stdin が最初のプロンプトで (Ctrl+D を使用して) 終了すると、2 番目raw_input()
のエラーEOFError
が発生します。raw_input()
詳細については、以下のサンプル コードを参照してください。
mailBody = ''
signature = 'Later!'
print 'Compose your mail:'
while True:
try:
# Hit ^D after entering some text
mailBody+= raw_input()
mailBody+='\n'
except EOFError:
break
# This raw_input() throws EOFError too. Because, stdin is terminated for the session
# when EOF (^D) is issues at first raw_input() method (Where as, it doesn't raise EOFError in Linux)
opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
print '-'*10+'Your Mail'
if opt == 'y':
print mailBody+"\n"+signature
else:
print mailBody
print '-'*19
プログラム出力:
-1- abhinay@MacBook code/py % python prompt.py
Compose your mail:
hello there!
how is everybody?
Do you want to add signature to your mail? (y/N): Traceback (most recent call last):
File "prompt.py", line 11, in <module>
opt = raw_input("Do you want to add signature to your mail? (y/N): ").lower()
EOFError
を上げないように 2 番目のプロンプトを作成するにはどうすればよいですかEOFError
。助けてください!
編集:
質問を簡単にするために編集しました。
上記のコードを Linux システムで実行しましたが、問題なく動作します。つまり、ユーザーは 2 番目の raw_input() で「(y/N)」の選択肢を受け取るように求められました。