Python には、 と という似た名前の関数が 2 つあります。違いは何ですか。exit()
またsys.exit()
、どちらをいつ使用すればよいですか。
ベストアンサー1
exit
対話型シェルのヘルパーです -sys.exit
プログラムで使用することを目的としています。
の
site
モジュール(起動時に自動的にインポートされますが、-S
コマンドラインオプションが指定されている場合) は、組み込み名前空間にいくつかの定数を追加します(例exit
)。これらは対話型インタープリタシェルには便利ですが、プログラムでは使用しないでください。
技術的には、それらはほとんど同じです。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
に定義されますサイト.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()
)。