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

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

Ответ 1

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

Модуль site (который автоматически импортируется во время запуска, за исключением случаев, когда -S командной строки -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')

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

Ответ 2

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

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

Ответ 3

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

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

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