Différence entre exit (0) et exit (1) en Python


168

Quelle est la différence entre exit(0)et exit(1)en Python?

J'ai essayé de regarder autour de moi mais je n'ai pas trouvé de question spécifique sur ces lignes. Si vous avez déjà répondu, un lien serait suffisant.


9
Voici un lien vers exit()dans la documentation , qui m'a pris une éternité à trouver.
Ryne Everett


Je viens de réaliser qu'il y a exit(0)ce qui est discuté dans cette question et aussi un avec un trait de soulignement _exit(0), la différence est expliquée ici
cardamome

La bonne chose à propos de ces codes est qu'ils peuvent être utilisés directement dans une ifinstruction dans un bashwrapper, de sorte que des mesures supplémentaires peuvent être prises que le programme Python réussisse ou non ou s'il a soulevé un statut différent de zéro.
SDsolar

bizarre, si 0 est faux et 1 est vrai en Python, vous penseriez que les chiffres signifieraient le contraire
Monica Heddneck

Réponses:


249

0 et 1 sont les codes de sortie.

exit(0) signifie une sortie propre sans aucune erreur / problème

exit(1) signifie qu'il y a eu un problème / une erreur / un problème et c'est pourquoi le programme se ferme.

Ce n'est pas spécifique à Python et c'est assez courant. Un code de sortie différent de zéro est traité comme une sortie anormale et, parfois, le code d'erreur indique la nature du problème. Un code d'erreur zéro signifie une sortie réussie.

Ceci est utile pour les autres programmes, shell, appelant, etc. pour savoir ce qui s'est passé avec votre programme et procéder en conséquence.


10
Et qu'en est-il de la sortie (-1)?
Faizan

16
@Faizan: Le code de sortie est une valeur 8 bits sous Unix. Si vous invoquez exit(-1), la valeur est équivalente à exit(255)- les 8 bits les moins significatifs sont relayés vers le programme appelant (shell ou autre).
Jonathan Leffler

4
Notez que selon la documentation , exit()est ajouté par le sitemodule, et ne doit pas être utilisé par les programmes. À la place, utilisez sys.exit(), ou même raise SystemExit, si vous ne souhaitez pas importer un autre module.
daviewales

2
En raison des codes de sortie d'Unix / Linux, je pensais que 0 est True et 1 est False dans les conditions Python.
vlyalcin le

19

Cela détermine l' état de sortie du programme à la fin de son exécution (généralement, 0 en cas de succès et 1 en cas d'erreur).

Ce n'est pas unique à Python, et l'effet exact dépend de votre système d'exploitation et de la façon dont le programme est appelé (bien que 99% du temps, si vous exécutez simplement des scripts Python, cela n'a pas d'importance).


12

La convention standard pour tous les programmes C, y compris Python, est pour exit(0)pour indiquer le succès, et / exit(1)ou toute autre valeur non nulle (dans la plage 1..255) pour indiquer l'échec. Toute valeur en dehors de la plage 0..255 est traitée modulo 256 (l'état de sortie est stocké dans une valeur 8 bits). Parfois, cela sera traité comme signé (vous pourriez donc voir -128, -127, etc.) mais plus généralement, il est traité comme non signé.

Ce statut est disponible pour le code qui a appelé Python. Cette convention s'applique à toutes les plates-formes, bien que la signification d'un statut de sortie différent de zéro puisse varier selon les plates-formes.


7

Le numéro que vous passez à la exit()fonction est simplement le code de retour de votre programme, qui est donné au système d'exploitation. Du point de vue de votre programme, il n'y a pas de différence: l'exécution se terminera dans les deux cas et la valeur fournie à la fonction sera donnée à l'OS. Mais certains outils et scripts prennent en compte le code de sortie du programme. La plupart des outils renvoient 0 lorsqu'ils réussissent et différent de zéro pour indiquer une erreur.

Ainsi, si votre programme sera exécuté à partir d'un script, d'un outil automatisé ou de tout autre logiciel prenant en compte le code retour (comme un IDE), vous devez faire attention à ce que vous retournez.

En cas de doute, renvoyez simplement 0 pour indiquer que tout va bien.


6

exit(0): Cela provoque la fermeture du programme avec une fin réussie.

exit(1): Cela provoque la fermeture du programme avec une signification spécifique au système.

Sur de nombreux systèmes, cela exit(1)signale une sorte de panne, mais il n'y a aucune garantie.

Si je me souviens bien, la norme C ne reconnaît que trois valeurs de sortie standard:

  • EXIT_SUCCESS - résiliation réussie
  • EXIT_FAILURE - résiliation infructueuse
  • 0 -- pareil que EXIT_SUCCESS
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.