Il semble que python supporte de nombreuses commandes différentes pour arrêter l'exécution du script.
Les choix que j'ai trouvé sont: quit()
, exit()
, sys.exit()
,os._exit()
En ai-je manqué? Quelle est la différence entre eux? Quand les utiliseriez-vous?
os.abort()
Réponses:
Permettez-moi de vous donner quelques informations à leur sujet:
quit()
soulève simplement l'SystemExit
exception.De plus, si vous l'imprimez, il donnera un message:
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 tentera de quitter Python est de taper
quit
.Néanmoins, ne
quit
doit pas être utilisé dans le code de production. En effet, cela ne fonctionne que si lesite
module est chargé. Au lieu de cela, cette fonction ne doit être utilisée que dans l'interpréteur.exit()
est un alias pourquit
(ou vice-versa). Ils existent ensemble simplement pour rendre Python plus convivial.De plus, il donne également un message lors de l'impression:
Cependant, comme
quit
,exit
est considéré comme mauvais à utiliser dans le code de production et doit être réservé pour une utilisation dans l'interpréteur. C'est parce qu'il repose lui aussi sur lesite
module.sys.exit()
soulève également l'SystemExit
exception. Cela signifie qu'il est le même quequit
etexit
à cet égard.Contrairement à ces deux cependant, il
sys.exit
est considéré comme bon à utiliser dans le code de production. En effet, lesys
module sera toujours là.os._exit()
quitte le programme sans faire appel à des gestionnaires de nettoyage, rinçage des tampons stdio, etc . Par conséquent, ce n'est pas un moyen standard de sortir et ne doit être utilisé que dans des cas spéciaux. Le plus commun d'entre eux se trouve dans le ou les processus enfant créés paros.fork
.Notez que, parmi les quatre méthodes données, seule celle-ci est unique dans ce qu'elle fait.
En résumé, les quatre méthodes quittent le programme. Cependant, les deux premiers sont considérés comme mauvais à utiliser dans le code de production et le dernier est un moyen non standard et sale qui n'est utilisé que dans des scénarios spéciaux. Donc, si vous voulez quitter un programme normalement, aller avec la troisième méthode:
sys.exit
.Ou, encore mieux à mon avis, vous pouvez simplement faire directement ce qui se
sys.exit
passe dans les coulisses et exécuter:De cette façon, vous n'avez pas besoin d'importer d'
sys
abord.Cependant, ce choix est simplement un sur le style et est purement à vous.
la source
quit
etexit
quittez le shell alors que cesys.exit
n'est pas le cas.sys.exit()
n'est pas un moyen fiable de fermer. S'il est appelé à l'intérieur d'un thread, il ne terminera que ce thread, sauf s'il se trouve dans le thread principal. Cela peut conduire à de nombreux cas où le programme continue parce que l'appel n'était pas dans le thread principal, d'autant plus que certains interprètes threadent invisiblement les appels.end
commande qui le feraitraise SystemExit
. Je ne vois pas pourquoi il ne peut pas y avoir quelque chose de simple comme ça, comme dans BASIC.print
une instruction a été remplacée par une fonction. Il est facile d'ajouter de la syntaxe, mais cela entraîne un coût de complexité.sys.exit()
?Les fonctions *
quit()
,exit()
etsys.exit()
fonctionnent de la même façon: ils soulèvent l'SystemExit
exception. Il n'y a donc pas de différence réelle, sisys.exit()
c'est toujours disponible , maisexit()
etquit()
ne sont disponibles que si lesite
module est importé.La
os._exit()
fonction est spéciale, elle se ferme immédiatement sans appeler de fonctions de nettoyage (elle ne vide pas les tampons, par exemple). Ceci est conçu pour des cas d'utilisation hautement spécialisés ... en gros, uniquement chez l'enfant après unos.fork()
appel.Conclusion
Utilisez
exit()
ouquit()
dans le REPL.Utilisez
sys.exit()
dans les scripts, ouraise SystemExit()
si vous préférez.Utilisez
os._exit()
pour que les processus enfants se terminent après un appel àos.fork()
.Tous ces éléments peuvent être appelés sans arguments, ou vous pouvez spécifier l'état de sortie, par exemple,
exit(1)
ouraise SystemExit(1)
pour quitter avec l'état 1. Notez que les programmes portables sont limités à des codes d'état de sortie compris entre 0 et 255, siraise SystemExit(256)
sur de nombreux systèmes, cela être tronqué et votre processus se terminera réellement avec le statut 0.Notes de bas de page
* En fait,
quit()
etexit()
sont des objets d'instance appelables, mais je pense que c'est correct de les appeler des fonctions.la source
Différents moyens de sortie
os._exit()
:exit(0)
:exit(1)
:sys.exit()
:quit()
:Sommaire
Fondamentalement, ils font tous la même chose, cependant, cela dépend aussi de la raison pour laquelle vous le faites.
Je ne pense pas que vous ayez oublié quoi que ce soit et je recommanderais de vous habituer à
quit()
ouexit()
.Vous utiliseriez
sys.exit()
etos._exit()
principalement si vous utilisez de gros fichiers ou utilisez python pour contrôler le terminal.Sinon, utilisez principalement
exit()
ouquit()
.la source
sys.exit
est la manière canonique de sortir.En interne
sys.exit
soulève justeSystemExit
. Cependant, appelersys.exit
est plus idiomatique que relancerSystemExit
directement.os.exit
est un appel système de bas niveau qui se termine directement sans appeler de gestionnaire de nettoyage.quit
etexit
n'existent que pour fournir un moyen simple de sortir de l'invite Python. C'est pour les nouveaux utilisateurs ou les utilisateurs qui ont accidentellement entré l'invite Python et qui ne veulent pas connaître la bonne syntaxe. Ils sont susceptibles d'essayer de taperexit
ouquit
. Bien que cela ne quitte pas l'interpréteur, il émet au moins un message qui leur indique une issue:Il s'agit essentiellement d'un hack qui utilise le fait que l'interprète imprime la
__repr__
de toute expression que vous entrez à l'invite.la source