while True:
reply = input('Enter text')
if reply == 'stop': break
print(reply.upper())
結果は次のとおりです。
Enter text:Traceback (most recent call last): File "C:\PythonProjects\5.py", line 2, in <module> reply = input('Enter text:') EOFError: EOF when reading a line [Finished in 0.2s with exit code 1]
Sublime Text 2のみです。IDLEを試し、コマンドラインを試しました。すべて完璧です。 Sublemeが私に叫ぶ必要があるのはなぜですか?
ちなみに、多分あなたは私のようなEOFがそのような状況で意味するかもしれないことを説明することができます。もちろん、EOF入力から読み取ると、適切なエラーが発生しますこの状況をモデル化したいと思います入力はキーボードのみですか?はいの場合、EOFを取得するにはどのキーの組み合わせを入力すればよいですか?
前もって感謝します。
同じ問題がありました。 Sublime Textのデフォルトコンソールの問題は、入力をサポートしていないことです。
これを解決するには、SublimeREPLというパッケージをインストールする必要があります。 SublimeREPLは、入力を受け付けるPythonインタープリターを提供します。
ソリューションを詳細に説明する 記事 があります。
help(input)
は、どのキーボードショートカットがEOFを生成するか、つまりUnixを示します。 Ctrl-D、Windows: Ctrl-Z+Return:
input([プロンプト])->文字列
標準入力から文字列を読み取ります。末尾の改行は削除されます。ユーザーがEOF(Unix:Ctl-D、Windows:Ctl-Z + Return)を押すと、EOFErrorが発生します。Unixでは、GNUプロンプト文字列(指定されている場合)は、読み取る前に末尾の改行なしで出力されます。
空のファイルを使用して再現できます:
_$ touch empty
$ python3 -c "input()" < empty
Traceback (most recent call last):
File "<string>", line 1, in <module>
EOFError: EOF when reading a line
_
読み取り用の空のファイルとして_/dev/null
_またはnul
(Windows)を使用できます。 _os.devnull
_は、OSで使用される名前を示します。
_$ python3 -c "import os; print(os.devnull)"
/dev/null
_
注:input()
は、ファイル/パイプからの入力を喜んで受け入れます。 stdin
を端末に接続する必要はありません。
_$ echo abc | python3 -c "print(input()[::-1])"
cba
_
コードでEOFError
を処理します:
_try:
reply = input('Enter text')
except EOFError:
break
_
または、スクリプトを実行するときに空でない入力を提供するようにエディターを構成します(たとえば、許可されている場合はカスタマイズされたコマンドラインを使用します)_python3 "%f" < input_file
_
EOFは、入力の終了を意味する特別な帯域外信号です。これは文字ではありませんが(古いDOS時代では、0x1BはEOFのように振る舞いました)、むしろ入力が終了したというOSからのシグナルです。
Windowsでは、コマンドプロンプトでCtrl+Z
を押すことにより、EOFを「入力」できます。これは、実行中のプログラムにEOFを提示する入力ストリームを閉じるように端末に通知します。他のOSまたは端末エミュレータでは、EOFは通常Ctrl+D
を使用して通知されることに注意してください。
Sublime Text 2の問題に関しては、Sublime内でプログラムを実行するときにstdin
が端末に接続されていないため、プログラムは空のファイル(おそらくnul
または/dev/null
)。 Python 3.1およびSublime Text 2エラー も参照してください。
現在のところ、唯一の解決策はSublimeREPLをインストールすることです。
Raghavの答えを拡張するには、入力でスクリプトを実行するたびに[ツール]-> [SublimeREPL]-> [Python]-> [実行]コマンドに移動するのは非常に面倒なので、便利なキーバインドを考案しました。 :
有効にするには、[設定]-> [キーの割り当て-ユーザー]に移動し、そこにコピーします:
[
{"keys":["ctrl+r"] ,
"caption": "SublimeREPL: Python - RUN current file",
"command": "run_existing_window_command",
"args":
{
"id": "repl_python_run",
"file": "config/Python/Main.sublime-menu"
}
},
]
当然、ショートカットを好きなものに変更するには、「キー」引数を変更する必要があります。