Pythonでは、exit()
とsys.exit()
の2つの似た名前の関数があります。違いは何ですか?また、どちらを使用するべきですか?
exit
は対話型シェルのためのヘルパーです - sys.exit
はプログラムでの使用を意図しています。
site
モジュール(-S
コマンドラインオプションが指定されている場合を除き、起動時に自動的にインポートされます)は、組み込み名前空間(exit
)にいくつかの定数を追加します。 これらは対話型インタプリタShellに役立ちます。プログラムでは使用しないでください 。
技術的には、ほとんど同じです: SystemExit
を上げる。 sys.exit
は sysmodule.c /でそうします。
static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
PyObject *exit_code = 0;
if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
return NULL;
/* Raise SystemExit so callers may catch it or clean up. */
PyErr_SetObject(PyExc_SystemExit, exit_code);
return NULL;
}
exit
はそれぞれ site.py と _sitebuiltins.py で定義されています。
class Quitter(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')
3番目の終了オプション、すなわち os._exit があることに注意してください。これは、クリーンアップハンドラの呼び出し、stdioバッファのフラッシュなどを行わずに終了します(通常、これはfork()
の後の子プロセスでのみ使用されます)。
コードでexit()
を使用してシェルで実行すると、プログラムを強制終了するかどうかを尋ねるメッセージが表示されます。本当に厄介です。 ここをクリック
しかし、この場合はsys.exit()
のほうが優れています。プログラムを閉じて、ダイアログボックスを作成しません。