Різниця між виходом (0) і виходом (1) в Python


167

Яка різниця між exit(0)і exit(1)в Python?

Я спробував озирнутися, але не знайшов конкретного питання в цих рядках. Якщо на нього вже відповіли, посилання буде достатньо.


9
Ось посилання на exit()документи , які мені знадобилися назавжди.
Ryne Everett


Щойно зрозумів, що там exit(0)обговорюється в цьому питанні, а також один із підкресленням _exit(0), різниця пояснюється тут
кардамон

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

дивно, якщо 0 є хибним, а 1 - правдою в Python, ви б подумали, що цифри означатимуть навпаки
Моніка Хеднек

Відповіді:


248

0 і 1 - вихідні коди.

exit(0) означає чистий вихід без будь-яких помилок / проблем

exit(1) означає, що виникла проблема / помилка / проблема, і саме тому програма виходить.

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

Це корисно для інших програм, оболонки, абонента тощо, щоб знати, що сталося з вашою програмою, і діяти відповідно.


10
А як щодо виходу (-1)?
Faizan

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

4
Зауважте, що згідно з документами , exit()додається siteмодулем, і його не повинні використовувати програми. Натомість використовуйте sys.exit()або навіть raise SystemExit, якщо ви не хочете імпортувати інший модуль.
daviewales

2
Через коди виходу з Unix / Linux, я думав, що 0 - це True, а 1 - False значення в умовах Python.
valalcin

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.