Разница между выходом (0) и выходом (1) в Python


168

В чем разница между exit(0)и exit(1)в Python?

Я попытался осмотреться, но не нашел конкретного вопроса по этим вопросам. Если ответ уже получен, ссылки будет достаточно.


9
Вот ссылка на exit()в документах , которая заняла меня навсегда, чтобы найти.
Райн Эверетт


Только что понял, что есть, exit(0)что обсуждается в этом вопросе, а также с подчеркиванием _exit(0), здесь
кардамон

Хорошая вещь об этих кодах состоит в том, что они могут использоваться непосредственно в ifвыражении в bashобертке, поэтому можно предпринять дальнейшие действия независимо от того, успешно ли выполняется программа Python или она подняла ненулевой статус.
SDsolar

странно, если 0 - ложь, а 1 - истина в Python, можно подумать, что числа означают обратное
Моника Хеднек

Ответы:


249

0 и 1 - коды выхода.

exit(0) означает чистый выход без каких-либо ошибок / проблем

exit(1) означает, что была какая-то проблема / ошибка / проблема, и именно поэтому программа закрывается.

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

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


10
А как насчет выхода (-1)?
Файзан

16
@Faizan: код выхода - это 8-битное значение в Unix. Если вы вызываете exit(-1), значение эквивалентно exit(255)- младшие 8 битов передаются вызывающей программе (оболочка или что-то еще).
Джонатан Леффлер

4
Обратите внимание, что в соответствии с документами , exit()добавляется siteмодулем, и не должны использоваться программами. Вместо этого используйте sys.exit()или даже raise SystemExit, если вы не хотите импортировать другой модуль.
daviewales

2
Из-за кодов выхода из Unix / Linux я думал, что 0 - это Истина, а 1 - Ложное значение в условиях Python.
Вляльцин

19

Это определяет состояние выхода из программы, когда она завершает работу (обычно 0 для успеха и 1 для ошибки).

Он не уникален для Python, и точный эффект зависит от вашей операционной системы и от того, как вызывается программа (хотя в 99% случаев, если вы просто запускаете скрипты Python, это не имеет значения).


12

Стандартное соглашение для всех программ на C, включая Python, предназначено для exit(0)указания успеха и / exit(1)или любого другого ненулевого значения (в диапазоне 1..255) для указания сбоя. Любое значение вне диапазона 0..255 обрабатывается по модулю 256 (состояние выхода сохраняется в 8-битном значении). Иногда это будет считаться подписанным (так что вы можете увидеть -128, -127 и т. Д.), Но чаще это считается неподписанным.

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


7

Число, которое вы передаете exit()функции, является просто кодом возврата вашей программы, который передается операционной системе. С точки зрения вашей программы, нет никакой разницы: выполнение завершится в обоих случаях, а значение, предоставленное функции, будет передано ОС. Но некоторые инструменты и скрипты учитывают код завершения программы. Большинство инструментов возвращают 0, когда они успешны, и ненулевые, чтобы указать на ошибку.

Таким образом, если ваша программа будет запускаться из сценария, автоматизированного инструмента или другого программного обеспечения, которое учитывает код возврата (например, IDE), вы должны быть осторожны с тем, что вы возвращаете.

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


6

exit(0)Это приводит к успешному завершению программы.

exit(1): Это приводит к выходу программы с системным значением.

На многих системах exit(1)сигнализирует о каком-то сбое, однако нет никаких гарантий.

Насколько я помню, стандарт C распознает только три стандартных значения выхода:

  • EXIT_SUCCESS - успешное завершение
  • EXIT_FAILURE - неудачное завершение
  • 0 -- такой же как EXIT_SUCCESS
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.