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:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>>
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, nequit
doit pas être utilisé dans le code de production. En effet, cela ne fonctionne que si le site
module est chargé. Au lieu de cela, cette fonction ne doit être utilisée que dans l'interpréteur.
exit()
est un alias pour quit
(ou vice-versa). Ils existent ensemble simplement pour rendre Python plus convivial.
De plus, il donne également un message lors de l'impression:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
>>>
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 le site
module.
sys.exit()
soulève également l' SystemExit
exception. Cela signifie qu'il est le même que quit
et exit
à cet égard.
Contrairement à ces deux cependant, il sys.exit
est considéré comme bon à utiliser dans le code de production. En effet, le sys
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 par os.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:
raise SystemExit
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.
quit
et exit
quittez le shell alors que ce sys.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 ferait raise 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()
et sys.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, si sys.exit()
c'est toujours disponible , mais exit()
et quit()
ne sont disponibles que si le site
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 un os.fork()
appel.
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()
.
Tous ces éléments peuvent être appelés sans arguments, ou vous pouvez spécifier l'état de sortie, par exemple, exit(1)
ou raise 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, si raise SystemExit(256)
sur de nombreux systèmes, cela être tronqué et votre processus se terminera réellement avec le statut 0.
* En fait, quit()
et exit()
sont des objets d'instance appelables, mais je pense que c'est correct de 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 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()
ou exit()
.
Vous utiliseriez sys.exit()
et os._exit()
principalement si vous utilisez de gros fichiers ou utilisez python pour contrôler le terminal.
Sinon, utilisez principalement exit()
ou quit()
.
sys.exit
est la manière canonique de sortir.
En interne sys.exit
soulève juste SystemExit
. Cependant, appeler sys.exit
est plus idiomatique que relancer SystemExit
directement.
os.exit
est un appel système de bas niveau qui se termine directement sans appeler de gestionnaire de nettoyage.
quit
et exit
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 taper exit
ou quit
. Bien que cela ne quitte pas l'interpréteur, il émet au moins un message qui leur indique une issue:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
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.
os.abort()