307 votes

Comment sortir de python sans traceback ?

Je voudrais savoir comment à j’ai sortie de python sans avoir un dump de retraçage sur la sortie.

Je veux encore envie d’être en mesure de retourner un code d’erreur, mais je ne veux pas afficher le journal de retraçage.

Je veux être en mesure de quitter à l’aide de exit(number) sans laisser de traces, mais en cas d’Exception (pas une sortie), je veux la trace.

320voto

jkp Points 20410

Vous rencontrez sans doute une exception et le programme est sortie à cause de cela (avec un retraçage). La première chose à faire est donc d’intercepter cette exception, avant de repartir proprement (peut-être avec un message, l’exemple donné).

Essayez quelque chose comme ceci dans votre `` routine :

87voto

bstpierre Points 12616

Vous êtes peut-être en essayant d'attraper une Exception et c'est la capture de la SystemExit exception soulevée par sys.exit()?

import sys

try:
    sys.exit(1) # Or something that calls sys.exit()
except SystemExit as e:
    sys.exit(e)
except Exception:
    # Cleanup and reraise. This will print a backtrace.
    # (Insert your cleanup code here.)
    raise

En général, la capture d'Exception est une mauvaise idée. Vous allez attraper toutes sortes de choses que vous ne voulez pas attraper -- SystemExit -- et il peut également masquer vos propres erreurs de programmation. Mon exemple ci-dessus est ridicule, sauf si vous êtes en train de faire quelque chose en termes de nettoyage. Vous pouvez le remplacer avec:

import sys
sys.exit(1) # Or something that calls sys.exit().

Si vous avez besoin pour quitter sans lever SystemExit:

import os
os._exit(1)

Je fais ceci, dans le code qui s'exécute sous unittest et des appels fork(). Unittest obtient lors de la fourche processus soulève SystemExit. C'est certainement un cas de coin!

48voto

Wojciech Bederski Points 2544
import sys
sys.exit(1)

10voto

Roberto Liffredo Points 15265
Quelque chose comme

-3voto

amynbe Points 77

AVERTISSEMENT : Selon les commentaires, ça ne va pas, mais je le garde pour obtenir un exemple de quoi ne pas faire.

Soit dit en passant, si vous souhaitez spécifier la variable d’exception en python 3 que vous devez faire

C’est « que » au lieu d’une virgule (http://www.python.org/dev/peps/pep-3110/#grammar-changes)

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