Разница между exit () и sys.exit () в Python


в Python есть две одноименные функции,exit() и sys.exit(). Какая разница и когда я должен использовать один над другим?

3 317

3 ответа:

exit является помощником для интерактивной оболочки -sys.exit предназначен для использования в программах.

The 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 определяется в 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')

обратите внимание, что есть третий вариант выхода, а именно ОС.Для _exit, который выходит без вызова очистки обработчики, промывка студию буферов и т. д. (и который обычно должен использоваться только в дочернем процессе после fork()).

Если я использую exit() в коде и запустить его в консоли, он показывает сообщение с вопросом, Хочу ли я убить эту программу или нет. Это действительно тревожно. посмотреть здесь

но sys.exit() лучше в данном случае. Он закрывает программу и не создает никакого диалогового окна.

Это по крайней мере на холостом ходу...

  • exit выходит и убивает программу с изображением этой.

  • sys.exit похож на break внутри цикла, который просто останавливает код прямо там, и не продолжается, все еще держит python открытым.