exit et exception...

Le
fred
Bonsoir,

Je voudrais faire en sorte que lorsque je quitte mon script python avec
un appel à exit(), il ne gère pas cela comme une exception.

Le bout de code suivant illustre la chose :

#! /usr/bin/env python

from sys import exit

try:
exit()
except:
print 'foo!'

Comment faire pour que 'foo!' ne soit pas affiché ?

Merci d'avance.


Cordialement.

--
Fred
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
NicolasP
Le #16647461
Bonjour,

try:
exit()
except:
print 'foo!'

Comment faire pour que 'foo!' ne soit pas affiché ?



Ne pas faire de "except:" mais faire "except quelquechose:".
Le "except:" est dangereux car il peut masquer beaucoup de problèmes. Les erreurs de syntaxe par exemple deviennent introuvables.

Nicolas
Bruno Desthuilliers
Le #16649371
fred a écrit :
Bonsoir,

Je voudrais faire en sorte que lorsque je quitte mon script python avec
un appel à exit(), il ne gère pas cela comme une exception.



Alors il va falloir créer ton propre langage. Le fait que exit() soit
implémenté par la levée d'une exception SysExit n'est pas un détail
d'implémentation.

Le bout de code suivant illustre la chose :

#! /usr/bin/env python

from sys import exit

try:
exit()
except:
print 'foo!'

Comment faire pour que 'foo!' ne soit pas affiché ?



En apprenant à utiliser correctement les exceptions ?-)

Règle N°1 : *jamais* de clause except "attrape-tout" - tu précises
toujours la (ou les) exceptions que tu entends attraper.

Règle N°2 : tu n'attrapes que les exceptions que tu es en mesure de
gérer effectivement.

Règle N°3 : la seule exception au règles 1 et 2 est le cas d'un
gestionnaire d'exception au niveau le plus haut du programme qui est
utilisé pour logger les exceptions (et leur traceback), afficher un
message d'erreur plus convivial, et essayer de terminer "proprement" le
programme (ou la gestion de la requête courante dans le cas d'un
programme serveur).


Pour en revenir à ton snippet, et partant du principe que tu es dans le
cas n°3 :

try:
sys.exit()
except (SysExit, KeyboardInterrupt):
raise
except Exception, e:
log(e)
sys.exit("une erreur est survenue :n%s" % e)

A adapter au besoin réel, of course.
fred
Le #16656111
Bruno Desthuilliers
En apprenant à utiliser correctement les exceptions ?-)


Ok :-)

Merci à tous les deux.

Je regarde ça.

--
Fred
fred
Le #16656471
fred
Je regarde ça.


Ça marche nickel.

Merci. Vraiment.

--
Fred
Publicité
Poster une réponse
Anonyme