Кажется, что Python поддерживает много разных команд, чтобы остановить выполнение скрипта.
Выборы , которые я нашел , являются: quit()
, exit()
, sys.exit()
,os._exit()
Я что-нибудь пропустил? Какая разница между ними? Когда бы вы использовали каждый?
os.abort()
Ответы:
Позвольте мне дать некоторую информацию о них:
quit()
просто поднимаетSystemExit
исключение.Кроме того, если вы распечатаете его, он выдаст сообщение:
Эта функциональность была включена, чтобы помочь людям, которые не знают Python. В конце концов, одна из наиболее вероятных вещей, которые новичок попытается выйти из Python, - это набрать текст
quit
.Тем не менее,
quit
следует не использоваться в производстве код. Это потому, что он работает, только еслиsite
модуль загружен. Вместо этого эту функцию следует использовать только в интерпретаторе.exit()
псевдоним дляquit
(или наоборот). Они существуют вместе просто для того, чтобы сделать Python более удобным для пользователя.Кроме того, он также выдает сообщение при печати:
Однако, вроде бы
quit
,exit
считается плохим для использования в производственном коде и должен быть зарезервирован для использования в интерпретаторе. Это потому, что он тоже зависит отsite
модуля.sys.exit()
также поднимаетSystemExit
исключение. Это означает, что это так же, какquit
иexit
в этом отношении.В отличие от этих двух, однако,
sys.exit
считается хорошим для использования в производственном коде. Это потому, чтоsys
модуль всегда будет там.os._exit()
выход из программы без вызова обработчиков очистки, очистки буферов stdio и т . д. Таким образом, это не стандартный способ выхода и должен использоваться только в особых случаях. Наиболее распространенным из них является дочерний процесс (ы), созданныйos.fork
.Обратите внимание, что из четырех приведенных методов только этот является уникальным в том, что он делает.
Подводя итог, все четыре метода выхода из программы. Однако первые два считаются плохими для использования в производственном коде, а последний является нестандартным, грязным способом, который используется только в специальных сценариях. Итак, если вы хотите , чтобы выйти из программы , как правило, идут с третьим способом:
sys.exit
.Или, что еще лучше, на мой взгляд, вы можете просто сделать то, что
sys.exit
происходит за кадром, и запустить:Таким образом, вам не нужно импортировать в
sys
первую очередь.Тем не менее, этот выбор просто по стилю и зависит только от вас.
источник
quit
иexit
выйти из оболочки покаsys.exit
нет.sys.exit()
это не надежный способ закрыть Если он вызывается внутри потока, он прервет только этот поток, если он не находится в основном потоке. Это может привести к большому количеству случаев, когда программа продолжается, потому что вызов не был в основном потоке, тем более что некоторые интерпретаторы будут невидимо обрабатывать вызовы.end
команды, которая будетraise SystemExit
. Не понимаю, почему не может быть ничего простого, как в BASIC.print
было изменено с оператора на функцию. Синтаксис легко добавить, но в этом есть сложность.sys.exit()
?Функции *
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()
.Все они могут быть вызваны без аргументов, или вы можете указать статус выхода, например,
exit(1)
илиraise SystemExit(1)
выйти со статусом 1. Обратите внимание, что переносимые программы ограничены кодами выхода в диапазоне 0-255, если выraise SystemExit(256)
на многих системах это будет получить усеченный, и ваш процесс фактически завершится со статусом 0.Сноски
* На самом деле,
quit()
иexit()
являются вызываемыми объектами-экземплярами, но я думаю, что можно вызывать их функции.источник
Различные средства выхода
os._exit()
:exit(0)
:exit(1)
:sys.exit()
:quit()
:Резюме
По сути, все они делают одно и то же, однако это также зависит от того, для чего вы это делаете.
Я не думаю, что вы что-то упустили, и я бы порекомендовал привыкнуть
quit()
илиexit()
.Вы бы использовали
sys.exit()
иos._exit()
основном, если вы используете большие файлы или Python для управления терминалом.В противном случае в основном используйте
exit()
илиquit()
.источник
sys.exit
это канонический способ выхода.Внутренне
sys.exit
просто поднимаетSystemExit
. Однако коллsys.exit
более идиоматичен, чем рейзSystemExit
напрямую.os.exit
это низкоуровневый системный вызов, который завершается напрямую, без вызова каких-либо обработчиков очистки.quit
иexit
существуют только для обеспечения простого выхода из приглашения Python. Это для новых пользователей или пользователей, которые случайно вошли в приглашение Python и не хотят знать правильный синтаксис. Они могут попытаться набратьexit
илиquit
. Хотя это не приведет к выходу из интерпретатора, оно по крайней мере выдаст сообщение, которое сообщит им выход:По сути, это просто взлом, который использует тот факт, что интерпретатор печатает
__repr__
любое выражение, которое вы вводите в приглашении.источник