557 votes

Les commandes de sortie Python: pourquoi tant de fois et quand faut-il les utiliser?

Il semble que python supporte de nombreuses commandes différentes pour arrêter l'exécution du script.
Les choix que j'ai trouvés sont les suivants: quit() , exit() , sys.exit() , os._exit()

En ai-je manqué? Quelle est la différence entre eux? Quand utiliseriez-vous chacun?

851voto

iCodez Points 41884

Permettez-moi de vous donner quelques informations sur eux:

  1. quit soulève l' SystemExit d'exception derrière les coulisses.

    En outre, si vous l'imprimer, il vous donnera un message:

    >>> print (quit)
    Use quit() or Ctrl-Z plus Return to exit
    >>>
    

    Cette fonctionnalité a été inclus pour aider les gens qui ne savent pas Python. Après tout, l'un des plus probables les choses un débutant va tenter de sortie de Python en tapant quit.

    Néanmoins, quit doivent pas être utilisés dans le code de production. C'est parce qu'il ne fonctionne que si l' site module est chargé. Au lieu de cela, cette fonction doit être utilisée uniquement dans l'interpréteur.

  2. exit est un alias pour quit (ou vice-versa). Ils existent tout simplement pour faire de Python plus convivial.

    En outre, il donne un message lors de l'impression:

    >>> print (exit)
    Use exit() or Ctrl-Z plus Return to exit
    >>>
    

    Toutefois, à l'instar quit, exit est considérée comme mauvaise pour les utiliser dans le code de production et devrait être réservé pour une utilisation dans l'interpréteur. C'est parce qu'il trop s'appuie sur l' site module.

  3. sys.exit soulève l' SystemExit d'exception en arrière-plan. Cela signifie qu'il est le même que quit et exit à cet égard.

    La différence de ces deux toutefois, sys.exit est considéré comme bon à utiliser dans la production de code. C'est parce que l' sys module sera toujours là.

  4. os._exit quitte le programme sans faire appel à des pointeurs de nettoyage, de rinçage stdio tampons, etc. Ainsi, il n'est pas un moyen standard de sortie et doit être utilisé uniquement dans des cas spéciaux. Le plus commun d'entre eux est dans le processus de l'enfant(es) créé par os.fork.

    Noter que, parmi les quatre méthodes de donnée, que celle-ci est unique en ce qu'il fait.

Résumer, tous les quatre méthodes de quitter le programme. Toutefois, les deux premiers sont considérés comme mauvais pour l'utiliser dans le code de production et le dernier est un non-standard, de façon sale qui est seulement utilisé dans des scénarios particuliers. Donc, si vous souhaitez quitter un programme normalement, rendez-vous avec la troisième méthode: sys.exit.


Ou, encore mieux, à mon avis, vous pouvez le faire directement ce qu' sys.exit ne les coulisses et l'exécuter:

raise SystemExit

De cette façon, vous n'avez pas besoin d'importer sys première.

Toutefois, ce choix est tout simplement l'un sur le style et est purement pour vous.

113voto

Dietrich Epp Points 72865

Les fonctions*quit(), exit(), et sys.exit() fonctionnent de la même manière: ils soulèvent l' SystemExit d'exception. Donc, il n'y a pas de réelle différence, sauf qu' sys.exit() est toujours disponible, mais exit() et quit() ne sont disponibles que si l' site module est importé.

L' os._exit() fonction est spécial, il se ferme immédiatement sans appeler de nettoyage de fonctions (il ne permet pas d'évacuer les tampons, par exemple). Il est conçu pour les très spécialisés des cas d'utilisation... en fait, dans le seul enfant à la suite d'un os.fork() appel.

Conclusion

  • Utiliser exit() ou quit() dans le REPL.

  • Utiliser sys.exit() dans les scripts, ou raise SystemExit() si vous préférez.

  • Utiliser os._exit() pour les processus enfants à la sortie après un appel à l' os.fork().

Notes de bas de page

* En fait, quit() et exit() sont remboursables objets d'instance, mais je pense que c'est correct de les appeler des fonctions.

58voto

Pipyaddict Points 40

os._exit() Sortie le processus sans appeler le nettoyage des gestionnaires.

exit(0) moyen de sortir proprement, sans erreurs et des problèmes de

exit(1) signifie qu'il y a un problème / erreur / problème et c'est pourquoi le programme est en cours de fermeture.

sys.exit (), c'est quand le système et python s'arrête signifie moins de mémoire est utilisée après que le programme est exécuté.

quit() Ferme le fichier python

Fondamentalement, ils font tous la même chose, cependant, cela dépend aussi de ce que vous faites pour.

Je ne pense pas que vous avez raté quelque chose et je le recommande vous habituer à quitter() ou exit().

Vous utilisez sys.exit() et de l'os._exit (), surtout si vous utilisez de gros fichiers ou l'utilisation de python pour le contrôle terminal.

Sinon, principalement utiliser exit() ou quitter()

46voto

oefe Points 9122

sys.exit est la manière canonique à la sortie.

En interne, sys.exit soulève SystemExit. Cependant, appelant sys.exitest plus idiomatique que la hausse de SystemExitdirectement.

os.exit est un système de bas niveau d'appel qui sort directement de voile blanc appelant tout le nettoyage des gestionnaires.

quitet 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 accidentellement entré dans l'invite Python, et je ne veux pas savoir le droit de la syntaxe. Ils sont susceptibles d'essayer de taper exit ou quit. Bien que ce ne sera pas sortie de l'interprète, il a au moins délivre un message qui leur dit un moyen de sortir:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$

C'est essentiellement juste un hack qui utilise le fait que l'interprète imprime l' __repr__ d'une expression que vous entrez à l'invite de commandes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X