Je voudrais savoir comment quitter Python sans avoir de vidage traceback sur la sortie.
Je souhaite toujours pouvoir renvoyer un code d'erreur, mais je ne souhaite pas afficher le journal de suivi.
Je veux pouvoir quitter exit(number)
sans trace mais en cas d'Exception (pas de sortie) je veux la trace.
Réponses:
Vous rencontrez probablement une exception et le programme se termine à cause de cela (avec une traceback). La première chose à faire est donc d'attraper cette exception, avant de sortir proprement (peut-être avec un message, exemple donné).
Essayez quelque chose comme ça dans votre
main
routine:la source
except Exception:
àsys.exit(0)
, inclusivement. C'est déjà le comportement par défaut pour imprimer une traceback sur toutes les exceptions non gérées et pour quitter après la fin du code, alors pourquoi s'embêter à faire la même chose manuellement?sys.exit()
doit être utilisé pour les programmes.exit()
est destiné aux shells interactifs. Voir La différence entre exit () et sys.exit () en Python? .Peut-être que vous essayez d'attraper toutes les exceptions et que cela intercepte l'
SystemExit
exception soulevée parsys.exit()
?En général, utiliser
except:
sans nommer une exception est une mauvaise idée. Vous attraperez toutes sortes de choses que vous ne voulez pas attraper - commeSystemExit
- et cela peut également masquer vos propres erreurs de programmation. Mon exemple ci-dessus est idiot, à moins que vous ne fassiez quelque chose en termes de nettoyage. Vous pouvez le remplacer par:Si vous devez sortir sans augmenter
SystemExit
:Je fais cela, dans du code qui fonctionne sous unittest et appelle
fork()
. Unittest obtient lorsque le processus bifurqué augmenteSystemExit
. C'est définitivement une valise d'angle!la source
SystemExit
juste pour appelersys.exit(e)
? La suppression des deux lignes a le même effet. En outre, le nettoyage appartientfinally:
, nonexcept Exception: ... raise
.la source
quelque chose comme ça
import sys; sys.exit(0)
?la source
Le code suivant ne déclenchera pas d'exception et se fermera sans traceback:
Voir cette question et les réponses associées pour plus de détails. Surpris pourquoi toutes les autres réponses sont si compliquées.
la source
Il est préférable de ne pas utiliser sys.exit () et de lever / gérer des exceptions pour permettre au programme de se terminer correctement. Si vous souhaitez désactiver le retraçage, utilisez simplement:
Vous pouvez définir cela en haut de votre script pour écraser toutes les sorties de traceback, mais je préfère l'utiliser avec plus de parcimonie, par exemple "erreurs connues" où je veux que la sortie soit propre, par exemple dans le fichier foo.py:
Si CalledProcessError est intercepté, la sortie ressemblera à ceci:
Si une autre erreur se produit, nous obtenons toujours la sortie de traçage complète.
la source
sys.trackbacklimit
dans Python 3, consultez cette réponse .Utilisez la fonction python intégrée quit () et c'est tout. Pas besoin d'importer de bibliothèque. J'utilise python 3.4
la source
Je le ferais de cette façon:
la source
Qu'en est-il de
Pas de traceback et en quelque sorte plus explicite.
la source
la source