Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3701
| From | Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: Gestion d'exceptions Python |
| Date | 2021-12-28 16:52 +0100 |
| Organization | Université de Strasbourg |
| Message-ID | <87zgokpw05.fsf@universite-de-strasbourg.fr.invalid> (permalink) |
| References | <gBCdnXXRa4BJhlb8nZ2dnUU7983NnZ2d@giganews.com> |
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.
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Gestion d'exceptions Python zeuwi <nospam_weezpokips@gmail.com.invalid> - 2021-12-28 08:14 -0600
Re: Gestion d'exceptions Python Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-12-28 16:52 +0100
Re: Gestion d'exceptions Python Olivier Miakinen <om+news@miakinen.net> - 2021-12-28 22:37 +0100
Re: Gestion d'exceptions Python Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2021-12-29 09:23 +0100
csiph-web