Python の exit() と sys.exit() の違い 質問する

Python の exit() と sys.exit() の違い 質問する

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())。

おすすめ記事