Вопрос-Ответ

Python exit commands - why so many and when should each be used?

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

Похоже, что python поддерживает множество различных команд для остановки выполнения скрипта.
Варианты, которые я нашел, следующие: quit(), exit(), sys.exit(), os._exit()

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

Переведено автоматически
Ответ 1

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


  1. quit() просто вызывает SystemExit исключение.


    Более того, если вы распечатаете ее, появится сообщение:


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

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


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


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


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


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

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


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


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


  4. 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() or quit() в REPL.



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



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



Все они могут вызываться без аргументов, или вы можете указать состояние выхода, например, exit(1) или raise SystemExit(1) для выхода со статусом 1. Обратите внимание, что переносимые программы ограничены кодами состояния выхода в диапазоне 0-255, если вы raise SystemExit(256) на многих системах это будет усечено, и ваш процесс фактически завершится со статусом 0.

Примечания

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

Ответ 3

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

os._exit():


  • Завершите процесс, не вызывая обработчики очистки.


exit(0):


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


exit(1):


  • Произошла какая-то проблема / error / problem, и именно поэтому программа завершается.


sys.exit():


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


quit():


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


Краткие сведения

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

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

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

В остальном в основном используется exit() или quit().

Ответ 4

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__ любого выражения, которое вы вводите в командной строке.

python