Команды выхода 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()
:
Резюме
В принципе, все они делают одно и то же, однако это также зависит от того, для чего вы это делаете.
Я не думаю, что вы ничего не оставили, и я бы рекомендовал привыкнуть к quit()
или exit()
.
Вы использовали бы sys.exit()
и os._exit()
в основном, если используете большие файлы или используете python для управления терминалом.
В противном случае используйте главным образом exit()
или quit()
.