Разница между exit () и sys.exit () в Python
в Python есть две одноименные функции,exit()
и sys.exit()
. Какая разница и когда я должен использовать один над другим?
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 открытым.