Je suis conscient de la die()
en PHP qui quitte un script prématurément.
Comment puis-je faire cela en Python ?
Je suis conscient de la die()
en PHP qui quitte un script prématurément.
Comment puis-je faire cela en Python ?
import sys
sys.exit()
les détails de la sys
documentation des modules :
sys.**exit**([_arg_])
Sortie de Python. Ceci est implémenté en levant l'option
SystemExit
exception, de sorte que les actions de nettoyage spécifiées par les clauses finales detry
sont respectées, et il est possible d'intercepter la tentative de tentative de sortie à un niveau extérieur.L'argument facultatif arg peut être un entier donnant l'état de sortie (par défaut à zéro), ou un autre type d'objet. S'il s'agit d'un nombre entier zéro est considéré comme une "terminaison réussie" et toute valeur différente de zéro est est considérée comme une "terminaison anormale" par les shells et autres. La plupart des systèmes exigent qu'il soit compris entre 0 et 127, et produisent des résultats non définis dans le cas contraire. Certains systèmes ont une convention pour attribuer des significations spécifiques à des codes de sortie spécifiques, mais elles sont généralement généralement sous-développés ; les programmes Unix utilisent généralement 2 pour les erreurs de et 1 pour tous les autres types d'erreurs. Si un autre type d'objet est passé, None est équivalent à passer zéro, et tout autre objet est imprimé sur
stderr
et donne lieu à un code de sortie de 1. En particulier,sys.exit("some error message")
est un moyen rapide de quitter un programme lorsqu'une une erreur se produit.Depuis
exit()
ne lève "que" finalement une exception, il ne quittera le processus le processus que lorsqu'il est appelé depuis le thread principal, et l'exception n'est pas interceptée.
Notez qu'il s'agit là de la façon "agréable" de quitter le système. @ glyphtwistedmatrix ci-dessous indique que si vous voulez une "sortie dure", vous pouvez utiliser os._exit(*errorcode*)
Il est également moins convivial puisqu'il ne permet pas à l'interpréteur de faire le ménage avant la mort du processus. D'un autre côté, elle fait tuer l'ensemble du processus, y compris tous les threads en cours d'exécution, tout en sys.exit()
(comme indiqué dans la documentation) ne s'arrête que si elle est appelée depuis le thread principal, sans aucun autre thread en cours d'exécution.
Probablement sys.exit()
ne fonctionne pas (ne tue pas le processus, mais seulement le fil) s'il est déclenché par un fil d'arrière-plan ?
Existe-t-il un moyen de terminer un script sans lever une exception ? Je passe déjà les drapeaux pertinents hors du script avec le piping print to stdout dans Popen, donc l'exception dans ce cas cause plus de problèmes qu'elle n'en résout.
Aussi sys.exit() mettra fin à tous les scripts python, mais quit() ne met fin qu'au script qui l'a engendré.
Quelqu'un sait-il si cela va quitter l'ensemble de l'interpréteur, ou juste provoquer l'arrêt de l'exécution du script ? Plus précisément : pour un script exécuté dans Spyder, l'interpréteur Python restera-t-il interactif, ou sera-t-il tué ? Essayez d'arrêter simplement le script de continuer, mais laissez l'interactivité de l'interpréteur présente.
@Alessa : cela semble plus élégant, mais ce n'est pas recommandé : vous levez directement une exception intégrée au lieu de la solution préférable (et réinscriptible). sys.exit
emballage
Vous pouvez également utiliser simplement exit()
.
Gardez à l'esprit que sys.exit()
, exit()
, quit()
et os._exit(0)
tuer l'interpréteur Python. Par conséquent, s'il apparaît dans un script appelé depuis un autre script par . execfile()
il arrête l'exécution des deux scripts.
Voir " Arrêter l'exécution d'un script appelé avec execfile "pour éviter cela.
Bien que vous devriez généralement préférer sys.exit
parce qu'elle est plus "conviviale" pour les autres codes, tout ce qu'elle fait en réalité est de lever une exception.
Si vous êtes sûr de devoir quitter un processus immédiatement, et que vous êtes à l'intérieur d'un gestionnaire d'exception qui attraperait SystemExit
il existe une autre fonction - os._exit
- qui se termine immédiatement au niveau C et n'effectue aucune des opérations normales de démontage de l'interpréteur ; par exemple, les hooks enregistrés avec le module "atexit" ne sont pas exécutés.
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.
1 votes
Utilisez simplement
import os
os._exit()