601

Python は、スクリプトの実行を停止するためのさまざまなコマンドをサポートしているようです。
私が見つけた選択肢は次の とおりquit()です。exit()sys.exit()os._exit()

見逃したことがありますか?それらの違いは何ですか?それぞれいつ使うの?

4

4 に答える 4

908

それらについていくつかの情報を提供しましょう:

  1. quit()単にSystemExit例外を発生させます。

    さらに、それを印刷すると、次のメッセージが表示されます。

    >>> print (quit)
    Use quit() or Ctrl-Z plus Return to exit
    >>>
    

    この機能は、Python を知らない人を助けるために組み込まれました。結局、初心者が Python を終了しようとする可能性が最も高いものの 1 つは、quit.

    ただし、製品コードでは使用しないquitでください。これは、モジュールがロードされている場合にのみ機能するためです。代わりに、この関数はインタープリターでのみ使用する必要があります。site

  2. exit()quit(またはその逆)のエイリアスです。これらは単に Python をよりユーザーフレンドリーにするために一緒に存在します。

    さらに、印刷するとメッセージも表示されます。

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

    ただし、 likeは、プロダクション コードで使用するのは不適切quitexitあると考えられており、インタープリターで使用するために予約する必要があります。siteこれもモジュールに依存しているためです。

  3. sys.exit()SystemExit例外を発生させます。quitこれは、その点ではand と同じであることを意味しexitます。

    ただし、これら 2 つとは異なりsys.exit、製品コードでの使用に適していると考えられています。これは、sysモジュールが常に存在するためです。

  4. os._exit()クリーンアップ ハンドラの呼び出し、stdio バッファのフラッシュなどを行わずにプログラムを終了します。したがって、これは標準的な終了方法ではなく、特別な場合にのみ使用する必要があります。これらの最も一般的なものは、によって作成された子プロセスにありos.forkます。

    与えられた 4 つのメソッドのうち、この 1 つだけが独自の機能を持っていることに注意してください。

要約すると、4 つのメソッドすべてがプログラムを終了します。ただし、最初の 2 つは製品コードで使用するのは不適切であると考えられており、最後の 2 つは特殊なシナリオでのみ使用される非標準の汚い方法です。したがって、プログラムを正常に終了したい場合は、3 番目の方法を使用しますsys.exit


または、私の意見ではsys.exit、舞台裏で実行することを直接実行して実行することもできます。

raise SystemExit

この方法では、最初にインポートする必要はありませんsys

ただし、この選択は単にスタイル上のものであり、純粋にあなた次第です.

于 2013-11-02T22:22:32.590 に答える
122

関数* quit()exit()、およびsys.exit()関数は同じように機能します: これらはSystemExit例外を発生させます。したがって、実際の違いはありませんが、それsys.exit()は常に利用可能ですがexit()、モジュールがインポートされたquit()場合にのみ利用可能です.site

このos._exit()関数は特殊で、クリーンアップ関数を呼び出さずにすぐに終了します (たとえば、バッファをフラッシュしません)。これは、高度に特殊化されたユースケース向けに設計されています...基本的には、os.fork()呼び出し後の子のみです。

結論

  • exit()orquit()を REPL で使用します。

  • sys.exit()スクリプトで使用するか、必要にraise SystemExit()応じて使用します。

  • os._exit()への呼び出し後に子プロセスが終了するために使用しos.fork()ます。

これらはすべて引数なしで呼び出すことも、終了ステータスを指定することもできます。たとえば、ステータス 1 で終了することexit(1)もできますraise SystemExit(1)。移植可能なプログラムは、0 ~ 255 の範囲の終了ステータス コードに制限されていることに注意してください。raise SystemExit(256)切り捨てられ、プロセスは実際にはステータス 0 で終了します。

脚注

*実はquit()exit()は呼び出し可能なインスタンスオブジェクトですが、関数と呼んでもいいと思います。

于 2013-11-02T22:22:20.640 に答える
62

終了のさまざまな手段

os._exit():

  • クリーンアップ ハンドラを呼び出さずにプロセスを終了します。

exit(0):

  • エラーや問題のないクリーンな終了。

exit(1):

  • 問題/エラー/問題が発生したため、プログラムが終了しています。

sys.exit():

  • システムと python がシャットダウンしたとき。これは、プログラムの実行後に使用されるメモリが少なくなることを意味します。

quit():

  • python ファイルを閉じます。

概要

基本的にそれらはすべて同じことをしますが、それはあなたが何のためにそれをしているのかによっても異なります.

私はあなたが何かを忘れたとは思わない.quit()またはに慣れることをお勧めしexit()ます.

主に、大きなファイルを使用している場合、または python を使用して端末を制御している場合に使用しますsys.exit()os._exit()

それ以外の場合は、主にexit()またはを使用しますquit()

于 2013-11-02T22:10:38.363 に答える
46

sys.exit終了する正規の方法です。

内部的sys.exitには単にレイズしSystemExitます。ただし、直接呼び出すsys.exitよりも呼び出しの方が慣用的です。SystemExit

os.exitクリーンアップ ハンドラを呼び出さずに直接終了する低レベルのシステム コールです。

quitexitPython プロンプトから抜け出す簡単な方法を提供するためだけに存在します。これは、新しいユーザー、または誤って Python プロンプトを入力したため、正しい構文を知りたくないユーザー向けです。彼らは、exitまたはを入力しようとする可能性がありますquit。これはインタープリターを終了しませんが、少なくとも出口を伝えるメッセージを発行します:

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

__repr__これは基本的に、プロンプトで入力した式の をインタプリタが出力するという事実を利用した単なるハックです。

于 2013-11-03T09:02:08.750 に答える