Il semble que python supporte de nombreuses commandes différentes pour arrêter l'exécution d'un script.
Les choix que j'ai trouvés sont les suivants : quit()
, exit()
, sys.exit()
, os._exit()
.
En ai-je oublié ? Quelle est la différence entre elles ? Quand les utiliseriez-vous ?
Permettez-moi de vous donner quelques informations à leur sujet :
quit()
][1] lève l'exception [SystemExit
][2] dans les coulisses. De plus, si vous l'imprimez, il donnera un message :
>>> print (quit)
Utilisez quit() ou Ctrl-Z plus Return pour quitter.
>>>
Cette fonctionnalité a été incluse pour aider les personnes qui ne connaissent pas Python. Après tout, l'une des choses les plus probables qu'un débutant essaie de faire pour quitter Python est de taper quit
.
Néanmoins, quit
ne devrait pas être utilisé dans un code de production. En effet, elle ne fonctionne que si le module [site
][3] est chargé. Au lieu de cela, cette fonction ne devrait être utilisée que dans l'interpréteur.
exit()
][4] est un alias pour quit
(ou vice-versa). Ils existent ensemble simplement pour rendre Python plus convivial. De plus, il donne lui aussi un message lorsqu'il est imprimé :
>>> print (exit)
Utilisez exit() ou Ctrl-Z plus Return pour quitter.
>>>
Cependant, comme quit
, exit
est considéré comme mauvais à utiliser dans le code de production et devrait être réservé à l'usage de l'interpréteur. Ceci est dû au fait qu'il s'appuie également sur le module site
.
sys.exit()
][5] lève l'exception SystemExit
en arrière-plan. Cela signifie que c'est la même chose que quit
et exit
à cet égard. Cependant, contrairement à ces deux derniers, sys.exit
est considéré comme bon à utiliser dans le code de production. En effet, le module [sys
][7] sera toujours présent.
os._exit()
][8] quitte le programme sans appeler les gestionnaires de nettoyage, sans vider les tampons stdio, etc. Il ne s'agit donc pas d'une façon standard de quitter le programme et elle ne devrait être utilisée que dans des cas particuliers. Le cas le plus courant est celui du ou des processus enfants créés par [os.fork
][9].Notez que, des quatre méthodes données, seule celle-ci est unique dans ce qu'elle fait.
En résumé, les quatre méthodes permettent de quitter le programme. Cependant, les deux premières sont considérées comme mauvaises à utiliser dans un code de production et la dernière est une méthode non standard et sale qui n'est utilisée que dans des scénarios spéciaux. Donc, si vous voulez quitter un programme normalement, utilisez la troisième méthode : sys.exit
.
Ou, encore mieux à mon avis, vous pouvez juste faire directement ce que sys.exit
fait en coulisse et exécuter :
raise SystemExit
De cette façon, vous n'avez pas besoin d'importer sys
en premier.
Cependant, ce choix n'est qu'une question de style et ne dépend que de vous.
[1] : http://docs.python.org/2/library/constants.html#quit [2] : http://docs.python.org/2/library/exceptions.html#exceptions.SystemExit [3] : http://docs.python.org/2/library/constants.html#constants-added-by-the-site-module [4] : http://docs.python.org/2/library/constants.html#exit [5] : http://docs.python.org/2/library/sys.html#sys.exit [7] : http://docs.python.org/2/library/sys.html [8] : http://docs.python.org/2/library/os.html#os._exit [9] : http://docs.python.org/2/library/os.html#os.fork
Les fonctions* quit()
, exit()
, et sys.exit()
fonctionnent de la même manière : elles lèvent l'exception SystemExit
. Il n'y a donc pas de réelle différence, sauf que sys.exit()
est toujours disponible mais que exit()
et quit()
ne sont disponibles que si le module site
est importé.
La fonction os._exit()
est spéciale, elle sort immédiatement sans appeler aucune fonction de nettoyage (elle ne vide pas les tampons, par exemple). Elle est conçue pour des cas d'utilisation très spécialisés... en gros, uniquement dans le fils après un appel à os.fork()
.
Utilisez exit()
ou quit()
dans le REPL.
Utilisez sys.exit()
dans les scripts, ou raise SystemExit()
si vous préférez.
Utilisez os._exit()
pour que les processus enfants se terminent après un appel à os.fork()
.
Toutes ces fonctions peuvent être appelées sans arguments, ou vous pouvez spécifier le statut de sortie, par exemple, exit(1)
ou raise SystemExit(1)
pour sortir avec le statut 1. Notez que les programmes portables sont limités aux codes d'état de sortie dans la plage 0-255, si vous raise SystemExit(256)
sur de nombreux systèmes, ce code sera tronqué et votre processus sortira en fait avec l'état 0.
* En fait, quit()
et exit()
sont des objets d'instance appelables, mais je pense que l'on peut les appeler des fonctions.
os._exit()
:
exit(0)
:
exit(1)
:
sys.exit()
:
quit()
:
Fondamentalement, ils font tous la même chose, cependant, cela dépend aussi de ce pour quoi vous le faites.
Je ne pense pas que vous ayez oublié quelque chose et je vous recommande de vous habituer à quit()
ou exit()
.
Vous utiliserez sys.exit()
et os._exit()
principalement si vous utilisez de gros fichiers ou si vous utilisez python pour contrôler le terminal.
Sinon, utilisez principalement exit()
ou quit()
.