Разница между выходом (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 и довольно распространено. Ненулевой код выхода обрабатывается как ненормальный выход, и иногда код ошибки указывает на проблему. Нулевой код ошибки означает успешный выход.

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

manojlds
источник
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
Sailakshmi Cheedella
источник