2012-03-16 12 views
76

Pythonのコマンドラインを終了するには、exit()とタイプする必要があります。私は、exitと入力した場合、それはあなたがexitを入力するとPythonのコマンドラインから抜ける

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

は通常、あなたがプログラムを終了したいと言います。なぜ私はコマンドラインを終了しようとしていることを知っているインタープリタは私に上記のエラーを与えるか?なぜそれはちょうど終了しないのですか?私はそれが問題ではなく、その愚かな質問を知っているが、私は興味があります。

+0

...かオブジェクトのいくつかの並べ替え... – summea

+0

しかし、通訳者は私が終了しようとしていることを知っているとthatsなぜメッセージを印刷します。それ以外の場合は、エラーメッセージが出力されます。私が退出しようとしていることを知っていれば、それはちょうど終了することができます。 – Ank

答えて

27

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

<function exit at 0x00B97FB0> 

しかし、彼らは代わりに有用なメッセージを表示するexitオブジェクトに対して、その関数を再定義することを決めました。それが愚かな行為であろうとなかろうと、それは主観的な質問ですが、「ただ終了」しない理由の1つは次のようなものです:

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

+3

この場合、本当の終了関数は 'import sys'を除いてスコープ内でさえありません。その後sys.exit()を呼び出してインタプリタを終了します。 –

13

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

+0

私のために働く唯一の方法... –

+0

スクリプトがエラーに遭遇した場合、この方法のように見えません。 – blaylockbk

7

私のPythonインタプリタでは、exitは実際には文字列であり、関数ではありません - 'Use Ctrl-D (i.e. EOF) to exit.'です。あなたは、type(exit)

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

+1

これはActive Pythonのものです。 – Ank

+4

Ctrl-Zは、UnixライクなシステムでCtrl-Dを実行するWindows(よく、DOS)上で行うことです。 –

+0

@KarlKnechtelああ、知っておいてよかった。私はウィンドウ上でプログラミングの経験がほとんどありません。 – Dunes

16

このメッセージは、これらの実施例でexit

外観の__str__属性である:

>>> print exit 
Use exit() or Ctrl-D (i.e. EOF) to exit 
>>> 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' 
7

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

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

27

これは私のために、pythonのプロンプトから出てくる最善の方法です。それは `最後に...そう、それは(おそらく)変数であるかもしれない)の機能は、多くの場合、(`と呼ばれる方法で行う必要があります

の出口()

関連する問題