Команды выхода Python - почему так много и когда каждый должен использоваться?

Кажется, что python поддерживает множество разных команд, чтобы остановить выполнение script.
Найденные варианты: quit(), exit(), sys.exit(), os._exit()

Я пропустил какой-нибудь? Какая разница между ними? Когда вы будете использовать каждый?

Ответ 1

Позвольте мне дать некоторую информацию о них:

  • quit вызывает SystemExit исключение за кулисами.

    Кроме того, если вы его распечатаете, он выдаст сообщение:

    >>> print (quit)
    Use quit() or Ctrl-Z plus Return to exit
    >>>
    

    Эта функция была включена, чтобы помочь людям, которые не знают Python. В конце концов, одна из наиболее вероятных вещей, которые новичок попытается выйти из Python, печатает в quit.

    Тем не менее, quit должен не использоваться в производственном коде. Это происходит потому, что он работает только при загрузке модуля site. Вместо этого эту функцию следует использовать только в интерпретаторе.

  • exit является псевдонимом для quit (или наоборот). Они существуют вместе, чтобы сделать Python более удобным для пользователя.

    Кроме того, он также выводит сообщение при печати:

    >>> print (exit)
    Use exit() or Ctrl-Z plus Return to exit
    >>>
    

    Однако, как и quit, exit считается плохим для использования в производственном коде и должен быть зарезервирован для использования в интерпретаторе. Это связано с тем, что он также полагается на модуль site.

  • sys.exit вызывает исключение SystemExit в фоновом режиме. Это означает, что в этом отношении это то же самое, что и quit и exit.

    В отличие от этих двух, sys.exit считается полезным для использования в производственном коде. Это связано с тем, что модуль sys всегда будет там.

  • os._exit выходит из программы без вызова обработчиков очистки, сброса буферов stdio и т.д.. Таким образом, это не стандартный способ выхода и должен использоваться только в особых случаях. Наиболее распространенными из них являются дочерние процессы, созданные os.fork.

    Обратите внимание, что из четырех приведенных методов только один из них уникален в том, что он делает.

Подсчитано, все четыре метода выходят из программы. Однако первые два считаются плохими для использования в производственном коде, а последний - нестандартным, грязным способом, который используется только в особых сценариях. Итак, если вы хотите нормально выйти из программы, перейдите к третьему методу: sys.exit.


Или, еще лучше, на мой взгляд, вы можете просто сделать то, что sys.exit делает за кулисами и запускать:

raise SystemExit

Таким образом, вам не нужно сначала импортировать sys.

Однако этот выбор просто один по стилю и зависит только от вас.

Ответ 2

Функции *quit(), exit() и sys.exit() действуют одинаково: они вызывают исключение SystemExit. Таким образом, нет никакой реальной разницы, за исключением того, что sys.exit() всегда доступен, но exit() и quit() доступны только в том случае, если импортирован модуль site.

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

Заключение

  • Используйте exit() или quit() в REPL.

  • Используйте sys.exit() в скриптах или raise SystemExit(), если хотите.

  • Используйте os._exit() для дочерних процессов для выхода после вызова os.fork().

Сноски

* На самом деле, quit() и exit() являются вызываемыми объектами экземпляра, но я думаю, что их можно назвать функциями.

Ответ 3

sys.exit - канонический путь выхода.

Внутренне sys.exit просто поднимает SystemExit. Однако вызов sys.exit более идиоматичен, чем прямой вызов SystemExit.

os.exit - это системный вызов низкого уровня, который выходит напрямую, не вызывая никаких обработчиков очистки.

quit и exit существуют только для обеспечения простого выхода из приглашения Python. Это касается новых пользователей или пользователей, которые случайно вошли в приглашение Python и не хотят знать правильный синтаксис. Вероятно, они попытаются ввести exit или quit. Хотя это не приведет к выходу из интерпретатора, оно, по крайней мере, выдает сообщение, которое сообщает им о выходе:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$

Это, по сути, просто хак, который использует тот факт, что интерпретатор печатает __repr__ любого выражения, которое вы вводите в приглашении.

Ответ 4

Различные способы выхода

os._exit():

  • Выход из процесса без вызова обработчиков очистки.

exit(0):

  • чистый выход без ошибок/проблем.

exit(1):

  • Была проблема с проблемой/ошибкой/, поэтому программа выходит.

sys.exit():

  • Когда система и питон закрываются; это означает, что после запуска программы используется меньше памяти.

quit():

  • Закрывает файл python.

Резюме

В принципе, все они делают одно и то же, однако это также зависит от того, для чего вы это делаете.

Я не думаю, что вы ничего не оставили, и я бы рекомендовал привыкнуть к quit() или exit().

Вы использовали бы sys.exit() и os._exit() в основном, если используете большие файлы или используете python для управления терминалом.

В противном случае используйте главным образом exit() или quit().