Różnica między exit (0) i exit (1) w Pythonie

167

Jaka jest różnica między exit(0)i exit(1)w Pythonie?

Próbowałem się rozejrzeć, ale nie znalazłem konkretnego pytania w tych wierszach. Jeśli już udzielono odpowiedzi, wystarczy link.

osoba ubiegająca się o
źródło
9
Oto link do exit()w dokumentacji , której znalezienie zajęło mi wieczność.
Ryne Everett
Właśnie zdałem sobie sprawę, że jest to, exit(0)co jest omówione w tym pytaniu, a także jedno z podkreśleniem _exit(0), różnica jest wyjaśniona tutaj
kardamon
Zaletą tych kodów jest to, że można ich używać bezpośrednio w ifinstrukcji w bashopakowaniu, dzięki czemu można podjąć dalsze działania bez względu na to, czy program w Pythonie się powiedzie, czy też zgłosił niezerowy stan.
SDsolar
dziwne, jeśli 0 to fałsz, a 1 to prawda w Pythonie, można by pomyśleć, że liczby oznaczałyby
coś

Odpowiedzi:

248

0 i 1 to kody wyjścia.

exit(0) oznacza czyste wyjście bez żadnych błędów / problemów

exit(1) oznacza, że ​​wystąpił jakiś problem / błąd / problem i dlatego program kończy pracę.

Nie jest to specyficzne dla Pythona i jest dość powszechne. Niezerowy kod zakończenia jest traktowany jako nieprawidłowe wyjście, a czasami kod błędu wskazuje, na czym polegał problem. Zerowy kod błędu oznacza pomyślne zakończenie.

Jest to przydatne dla innych programów, powłoki, wywołującego itp., Aby wiedzieć, co się stało z twoim programem i postępować zgodnie z tym.

manojlds
źródło
10
A co z wyjściem (-1)?
Faizan
16
@Faizan: Kod zakończenia to 8-bitowa wartość w systemie Unix. Jeśli wywołasz exit(-1), wartość jest równoważna exit(255)- 8 najmniej znaczących bitów jest przekazywanych do programu wywołującego (powłoka lub cokolwiek).
Jonathan Leffler
4
Zauważ, że zgodnie z dokumentacją , exit()jest dodawany przez sitemoduł i nie powinien być używany przez programy. Zamiast tego użyj sys.exit()lub nawet raise SystemExit, jeśli nie chcesz importować innego modułu.
daviewales
2
Z powodu kodów wyjścia z systemu Unix / Linux myślałem, że 0 to prawda, a 1 to fałsz w warunkach Pythona.
vlyalcin
19

Określa to status wyjścia programu po zakończeniu jego działania (zwykle 0 dla sukcesu i 1 dla błędu).

Nie jest to unikalne dla Pythona, a dokładny efekt zależy od systemu operacyjnego i sposobu wywołania programu (choć 99% czasu, jeśli uruchamiasz tylko skrypty Pythona, nie ma to znaczenia).

David Robinson
źródło
12

Standardowa konwencja dla wszystkich programów C, w tym Pythona, mówi o exit(0)sukcesie i / exit(1)lub dowolnej innej wartości niezerowej (w zakresie 1..255), aby wskazać błąd. Każda wartość spoza zakresu 0..255 jest traktowana jako modulo 256 (kod wyjścia jest zapisywany w wartości 8-bitowej). Czasami będzie to traktowane jako podpisane (więc możesz zobaczyć -128, -127 itd.), Ale częściej jest traktowane jako niepodpisane.

Ten status jest dostępny dla kodu, który wywołał Pythona. Ta konwencja ma zastosowanie na różnych platformach, chociaż znaczenie niezerowego statusu wyjścia może się różnić na różnych platformach.

Jonathan Leffler
źródło
7

Liczba, którą przekazujesz do exit()funkcji, to po prostu kod powrotu programu, który jest przekazywany do systemu operacyjnego. Z punktu widzenia twojego programu nie ma różnicy: wykonanie zakończy się w obu przypadkach, a wartość dostarczona do funkcji zostanie przekazana do systemu operacyjnego. Jednak niektóre narzędzia i skrypty uwzględniają kod zakończenia programu. Większość narzędzi zwraca 0, gdy im się powiedzie, i niezerową, aby wskazać błąd.

Tak więc, jeśli Twój program będzie uruchamiany ze skryptu, zautomatyzowanego narzędzia lub z innego oprogramowania, które bierze pod uwagę kod powrotu (na przykład IDE), musisz uważać na to, co zwracasz.

W razie wątpliwości po prostu zwróć 0, aby wskazać, że wszystko jest w porządku.

José Ernesto Lara Rodríguez
źródło
6

exit(0): Powoduje to zakończenie programu po pomyślnym zakończeniu.

exit(1): Powoduje to zamknięcie programu w znaczeniu specyficznym dla systemu.

W wielu systemach exit(1)sygnalizuje jakąś awarię, jednak nie ma gwarancji.

O ile pamiętam, standard C rozpoznaje tylko trzy standardowe wartości wyjścia:

  • EXIT_SUCCESS - pomyślne zakończenie
  • EXIT_FAILURE - niepomyślne zakończenie
  • 0 -- taki sam jak EXIT_SUCCESS
sailakshmi cheedella
źródło