Pythonコマンドラインを終了する


152

Pythonコマンドラインを終了するには、exit()と入力する必要があります。exitと入力すると、

Use exit() or Ctrl-Z plus Return to exit

通常、と入力exitすると、プログラムを終了します。コマンドラインを終了しようとしていることがわかっているのに、インタープリターが上記のエラーを表示するのはなぜですか?なぜ終了しないのですか?私はそれが問題ではないことを知っていて、それがばかげた質問ですが、私は好奇心が強いです。


()最後に関数がどのように呼び出されるかと関係があるかもしれません...そうでない場合、それは(おそらく)変数かもしれません...または何らかのオブジェクトです...
summea

そうですが、通訳者は私が終了しようとしていることを知っているので、そのメッセージを出力します。そうしないと、エラーメッセージが出力されます。終了しようとしていることがわかっている場合は、終了できます。
はAnk

1
exitまたはexit()を使用すると、私が世界中で見つけたインストールの約20%でエラーがスローされます... CTRL + Z + returnのみが常に機能します。
Paulo Carvalho

回答:


37

私のpythonインタプリタでexitは、実際には関数ではなく文字列です- 'Use Ctrl-D (i.e. EOF) to exit.'。次のように入力して、通訳を確認できます。type(exit)

アクティブなpythonで起こっているのは、exitが関数であることです。関数を呼び出さない場合、オブジェクトの文字列表現が出力されます。これは、返されるオブジェクトのデフォルトの動作です。デザイナーがexitと入力してインタープリターを終了しようとするのではないかと考えたため、exit関数の文字列表現を役立つメッセージにしました。str(exit)またはを入力して、この動作を確認できますprint exit


14
Ctrl-Zは、UnixライクなシステムでCtrl-Dを実行するWindows(まあ、DOS)で実行するものです。
Karl Knechtel、2012年

@KarlKnechtelああ、知っておくと良い。Windowsでのプログラミングの経験はほとんどありません。
砂丘2012年

60

これは私にとってはうまくいきます。Pythonプロンプトから抜ける最善の方法です。

出口()


4
私はこの答えについて困惑しています...質問自体は、彼らがすでにそれがexit()うまくいくことを知っていると言います、そして彼らexitは括弧なしではうまくいかない理由を知りたいのです。したがって、この回答は質問の一部を繰り返すだけで、実際には回答しません。
ベン・リー

質問を読まないためにこの回答に反対票を投じたいのですが、ほとんどのpythonインストールではこれが正しいと思います。ユーザーがこれは彼らのケースでは機能しないと言っただけなので、それを推奨することは...不適切だと思われます。
person27

37

あなたが入力するとexit、コマンドラインでは、その名前と呼び出しで変数を見つける__repr__(または__str__それに)。通常、次のような結果が得られます。

<function exit at 0x00B97FB0>

しかし、彼らはその機能を exitオブジェクトが役に立つメッセージを表示するように。それが愚かな振る舞いであるかどうかは主観的な質問ですが、「ただ終了する」だけではない理由の1つは次のとおりです。

たとえば、デバッガーのコードを見ていて、オブジェクトの1つがexit関数を参照しているとします。デバッガー__repr__がそのオブジェクトを呼び出してその関数を表示しようとすると、プログラムが突然停止します。それは本当に予期せぬことであり、対策をさらに複雑にする可能性があります(たとえば、その動作をコマンドラインに制限したexitとしても、属性を持つオブジェクトを印刷しようとするとどうなりますか?)


4
この場合、実際の出口関数はimport sys、インタープリターを終了するためにsys.exit()を呼び出す必要がない限り、スコープ内にもありません。
マイケル・ディロン

19

このメッセージはある__str__の属性exit

これらの例を見てください:

1

>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

2

>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

19

でPythonインタープリターを終了することをお勧めしますCtrl-D。これは、ファイルの終わりまたは伝送の終わりのための古いASCIIコードです。


スクリプトでエラーが発生した場合、このメソッドは機能しないようです。
blaylockbk 16

2
Ctrl-BreakWindowsで一貫して動作します。Ctrl-DまたはCtrl-Z、Python 2.7、3.4、3.6のWindowsで動作しました。しかし、Python 3.7ではこれらは機能しなくなり、終了する最短のASCIIシーケンスはCtrl-Z Enterです。
ボブスタイン


8

インタプリタはコマンドを提供するシェルではないため、インタプリタです。あなたがそれに与えるものはPythonコードです。

Pythonの構文はexit、それ自体では、オブジェクトの名前以外にはなり得ないようなものです。オブジェクトを単に参照するだけでは、実際には何もできません(read-eval-printループが通常行うことを除いて、オブジェクトの文字列表現を表示します)。


6

あなたはそれを修正することができます。

PYTHONSTARTUP次のようにPythonファイルにリンクします

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

これはどのように作動しますか?

pythonコマンドラインはread-evaluate-print-loopです。つまり、テキストを入力すると、そのテキストを読み取って評価し、最終的に結果を出力します。

あなたが入力するとexit()、それはタイプの呼び出し可能オブジェクトに評価site.Quitterし、その呼び出し、__call__システムを終了機能を。入力exitすると、同じ呼び出し可能オブジェクトに評価されますが、呼び出さずにオブジェクトが出力され、次に呼び出されます__repr__れます。

かっこなしで入力した場合でも、リンク__repr__すること__call__でこれを利用して、システムを終了するという期待される動作を得るexitことができます。


4
彼らはexit「役立つ」文字列を出力するように努力しましたが、自然なことをするためにそれをバインドしてインタープリターを終了することはできませんでした。毎回括弧をタイプしなければならないのはイライラします。この答えは完璧で、代わりに受け入れられるべきです。
Przemek D

3

Pythonターミナルを終了するには、次のようにします。

exit()

ほとんどのユーザーが呼び出さずにexitと混合するため呼び出される関数ですが、新しいPyhtonターミナルはメッセージを表示するので注意してください...

またはショートカットとして、次を押します:

Ctrl + D

キーボードで...

Ctrl + D


1
あなたが言ったすべてはすでに上記の回答でカバーされています。
Przemek D

0

あなたがpythonコマンドラインで立ち往生し、上記の解決策のどれもうまくいかなかった場合は、試してください exit(2)


-1

「exit」は、Pythonプログラムで使用できる有効な変数名です。その変数の値を確認するだけの場合は、インタープリターを終了したくないでしょう。


に割り当てる場合を除いてexit、このシンボルを上書きし、機能しexit()なくなります。この記号は有効な変数名ですが、このような方法で使用することはあまりお勧めできません。
Przemek D
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.