Unterschied zwischen exit (0) und exit (1) in Python

167

Was ist der Unterschied zwischen exit(0)und exit(1)in Python?

Ich habe versucht, mich umzusehen, aber in diesen Zeilen keine spezifische Frage gefunden. Wenn es bereits beantwortet wurde, würde ein Link ausreichen.

Sucher
quelle
9
Hier ist ein Link zu exit()den Dokumenten , für dessen Suche ich ewig gebraucht habe.
Ryne Everett
Gerade realisiert, dass es gibt, exit(0)was in dieser Frage diskutiert wird und auch eine mit einem Unterstrich _exit(0), der Unterschied wird hier
Kardamom
Das Schöne an diesen Codes ist, dass sie direkt in einer ifAnweisung in einem bashWrapper verwendet werden können, sodass weitere Maßnahmen ergriffen werden können, unabhängig davon, ob das Python-Programm erfolgreich ist oder ob es einen Status ungleich Null ausgelöst hat.
SDsolar
seltsam, wenn 0 in Python falsch und 1 in Python wahr ist, würden Sie denken, dass die Zahlen das Gegenteil bedeuten würden
Monica Heddneck

Antworten:

248

0 und 1 sind die Exit-Codes.

exit(0) bedeutet einen sauberen Ausgang ohne Fehler / Probleme

exit(1) bedeutet, dass es ein Problem / einen Fehler / ein Problem gab und das Programm deshalb beendet wird.

Dies ist nicht Python-spezifisch und ziemlich häufig. Ein Exit-Code ungleich Null wird als abnormaler Exit behandelt, und manchmal gibt der Fehlercode an, um welches Problem es sich handelt. Ein Null-Fehlercode bedeutet einen erfolgreichen Exit.

Dies ist nützlich, damit andere Programme, Shell, Aufrufer usw. wissen, was mit Ihrem Programm passiert ist, und entsprechend vorgehen.

Manojlds
quelle
10
Und was ist mit Ausgang (-1)?
Faizan
16
@Faizan: Der Exit-Code ist ein 8-Bit-Wert unter Unix. Wenn Sie aufrufen exit(-1), entspricht der Wert exit(255)- die niedrigstwertigen 8 Bits werden an das aufrufende Programm (Shell oder was auch immer) weitergeleitet.
Jonathan Leffler
4
Beachten Sie, dass nach der Dokumentation , exit()wird durch das zugegebene siteModul, und nicht von Programmen verwendet werden soll. Verwenden Sie stattdessen sys.exit()oder sogar raise SystemExit, wenn Sie kein anderes Modul importieren möchten.
Daviewales
2
Aufgrund von Exit-Codes von Unix / Linux dachte ich, 0 ist wahr und 1 ist falsch unter den Python-Bedingungen.
Vlyalcin
19

Dies bestimmt den Exit - Status des Programms , wenn es Ausführung beendet ist ( in der Regel 0 für Erfolg und 1 für Fehler).

Es ist nicht nur für Python gültig, und die genaue Auswirkung hängt von Ihrem Betriebssystem und dem Aufruf des Programms ab (obwohl es in 99% der Fälle keine Rolle spielt, wenn Sie nur Python-Skripte ausführen).

David Robinson
quelle
11

Die Standardkonvention für alle C-Programme, einschließlich Python, besteht exit(0)darin, Erfolg anzuzeigen, exit(1)oder einen anderen Wert ungleich Null (im Bereich 1..255), um einen Fehler anzuzeigen. Jeder Wert außerhalb des Bereichs 0..255 wird modulo 256 behandelt (der Exit-Status wird in einem 8-Bit-Wert gespeichert). Manchmal wird dies als signiert behandelt (so dass Sie möglicherweise -128, -127 usw. sehen), aber normalerweise wird es als nicht signiert behandelt.

Dieser Status steht dem Code zur Verfügung, der Python aufgerufen hat. Diese Konvention gilt plattformübergreifend, obwohl die Bedeutung des Exit-Status ungleich Null auf verschiedenen Plattformen variieren kann.

Jonathan Leffler
quelle
7

Die Nummer, die Sie an die exit()Funktion übergeben, ist einfach der Rückkehrcode Ihres Programms, der dem Betriebssystem gegeben wird. Aus Sicht Ihres Programms gibt es keinen Unterschied: Die Ausführung endet in beiden Fällen, und der der Funktion bereitgestellte Wert wird dem Betriebssystem übergeben. Einige Tools und Skripte berücksichtigen jedoch den Exit-Code des Programms. Die meisten Tools geben 0 zurück, wenn sie erfolgreich sind, und ungleich Null, um einen Fehler anzuzeigen.

Wenn Ihr Programm also über ein Skript, ein automatisiertes Tool oder eine andere Software ausgeführt wird, die den Rückkehrcode berücksichtigt (z. B. eine IDE), müssen Sie bei der Rückgabe vorsichtig sein.

Im Zweifelsfall geben Sie einfach 0 zurück, um anzuzeigen, dass alles in Ordnung ist.

José Ernesto Lara Rodríguez
quelle
5

exit(0): Dadurch wird das Programm nach erfolgreicher Beendigung beendet.

exit(1): Dadurch wird das Programm mit einer systemspezifischen Bedeutung beendet.

exit(1)Signalisiert auf vielen Systemen einen Fehler, es gibt jedoch keine Garantie.

Soweit ich mich erinnere, erkennt der C-Standard nur drei Standard-Exit-Werte:

  • EXIT_SUCCESS - erfolgreiche Kündigung
  • EXIT_FAILURE - erfolglose Kündigung
  • 0 -- gleich wie EXIT_SUCCESS
Sailakshmi Cheedella
quelle