Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

exit et exception...

4 réponses
Avatar
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

4 réponses

Avatar
NicolasP
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
Avatar
Bruno Desthuilliers
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.
Avatar
fred
Bruno Desthuilliers a écrit :

En apprenant à utiliser correctement les exceptions ?-)


Ok :-)

Merci à tous les deux.

Je regarde ça.

--
Fred
Avatar
fred
fred a écrit :

Je regarde ça.


Ça marche nickel.

Merci. Vraiment.

--
Fred