36
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 を取得するにはどのキーの組み合わせを入力すればよいですか?

前もって感謝します。

4

5 に答える 5

36

私も同じ問題を抱えていました。Sublime Text のデフォルトのコンソールの問題は、入力をサポートしていないことです。

これを解決するには、SublimeREPL というパッケージをインストールする必要があります。SublimeREPL は、入力を受け入れる Python インタープリターを提供します。

解決策を詳しく説明した記事があります。

SublimeREPL の GitHub ページ

于 2013-03-14T18:49:33.210 に答える
11

help(input)EOF を生成するキーボード ショートカット、つまり Unix: Ctrl-D、 Windows: を示しますCtrl-Z+Return

入力([プロンプト]) -> 文字列

標準入力から文字列を読み取ります。末尾の改行は削除されます。ユーザーが EOF に達した場合 (Unix: Ctl-D、Windows: Ctl-Z+Return)、EOFError を発生させます。Unix では、GNU readline が有効な場合に使用されます。プロンプト文字列が指定されている場合、読み取る前に末尾の改行なしで出力されます。

空のファイルを使用して再現できます。

$ 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.devnullOS で使用されている名前を示します。

$ 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

于 2012-09-23T04:19:11.690 に答える
10

EOF は、入力の終わりを意味する特別な帯域外信号です。これは文字ではなく (古い DOS の時代では 0x1B は EOF のように機能していました)、入力が終了したという OS からの信号です。

Ctrl+ZWindows では、コマンド プロンプトでを押して EOF を「入力」できます。これは、実行中のプログラムに EOF を提示する入力ストリームを閉じるように端末に通知します。他の OS またはターミナル エミュレータでは、通常、EOF は を使用して通知されることに注意してくださいCtrl+D

Sublime Text 2 に関する問題については、stdinSublime 内でプログラムを実行しているときに端末に接続されていないように見えるため、プログラムは空のファイル (おそらくnulまたは/dev/null) に接続されて開始されます。Python 3.1 および Sublime Text 2 エラーも参照してください。

于 2012-09-23T01:15:41.230 に答える