Exi t soulève une exception SystemExit
; c'est comme ça que ça termine le programme. Que votre environnement affiche cette exception après la fin n'est pas un bogue, il vous montre simplement la cause. Je suis d'accord avec vous (comme le fait, par exemple, this PEP), que le comportement par défaut devrait être de pas imprimer un message de retraçage pour cette exception, et pour KeyboardException
Mais à la fin, l'exécution arrêtai, comme a été conçu pour faire.
Voir la documentation pour plus de détails: https://docs.python.org/2/library/sys.html#sys.exit
Quelques réponses ici d'abord indiqué que vous ne pouvez pas passer une chaîne à exit
. C'est faux: des docs (emphase mienne)
L'argument optionnel 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 non nulle est considérée comme une "terminaison anormale" par des coquilles et similaires. La plupart des systèmes requièrent qu'il soit compris entre 0 et 127 et produisent des résultats indéfinis sinon ... Si un autre type d'objet est passé, None équivaut à passer à zéro, et tout autre objet est imprimé dans stderr et entraîne une sortie code de 1. En particulier, sys.exit ("un message d'erreur") est un moyen rapide de quitter un programme lorsqu'une erreur se produit.
La fonction exit
builtin fait la même chose. En général, il n'est pas génial d'ombrer la fonction intégrée en important à partir d'un module, bien que dans ce cas, cela n'a pas d'importance. Style recommandé serait
import sys
sys.exit("My exception")
Si cela vous semble unintuitive, vous pouvez contourner la gestion des exceptions à l'aide os._exit. Ne pas les faire sans raison
yes ("Une exception est survenue, utilisez% tb pour voir le retraçage complet SystemExit: ERROR") – jooj
ce code n'est même pas valide, corrigez-le. – norok2
Quelle version de Python et comment exécutez-vous le code? –