Sujet : Re: Gestion d'exceptions Python
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.pythonDate : 28. Dec 2021, 17:52:26
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87zgokpw05.fsf@universite-de-strasbourg.fr.invalid>
References : 1
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
zeuwi <
nospam_weezpokips@gmail.com.invalid> writes:
J'ai ce bout de code, j'ai levé une exception, mais je m'étonne de
voir pourquoi le code continue de tourner alors même que cette
dernière lève une exception. Lors des tests dans l'interpréteur, le
rentre volontairement une année négative, une erreur est bien levée
cependant j'ai le résultat qui ressort et m'indique qu'il s'agit d'une
année non bissextile par exemple. Est ce bien comme cela qu'une
exception doit fonctionner?
La clause "except" traite/intercepte l'exception, il sert à cela.
L'exception est donc interceptée, et le code se poursuit normalement.
C'est exactement ce qui doit se passer.
try:
année = int(année)
if année <= 0:
raise ValueError("e;L'année saisie est négative ou nulle"e;)
except ValueError:
print('Erreur lors de la conversion de l'année')
Le traitement de ton exception consiste ici à afficher un message (puis
à continuer comme si de rien n'était). Ce n'est presque jamais une bonne
idée.
Si tu ne veux pas intercepter l'exception : enlève try et sa clause
except (et aussi print).
Si tu veux afficher un message et "re-déclencher" l'exception, utilise
except ValueError:
print (...)
raise
Tu peux aussi donner explicitement un nom à l'exception
except ValueError as e:
print (...)
raise e
Dans ce cas, le message sera affiché par print, et la suite du code ne
sera pas exécutée (jusqu'à ce qu'un autre bloc try/except intercepte
l'exception).
Dans ton cas, tu veux manifestement ne pas faire le calcul en cas
d'erreur. Le code devrait être
année = input("e;veuillez saisir une année: "e;)
try:
année = int(année)
if année <= 0:
raise ValueError("e;L'année saisie est négative ou nulle"e;)
if année % 400 == 0 or (année % 4 == 0 and année % 100 !=0):
print("e;Bisextile"e;)
else:
print("e;Non Bisextile"e;)
except ValueError:
print('Erreur lors de la conversion de l'année')
J'ai laissé ces saloperies de '"e;' mais ça serait bien que tu nous les
épargnes. (Ou alors est-ce juste chez moi ?)
Cdt,
Sans commentaire.
-- Alain.