Path: ...!weretis.net!feeder6.news.weretis.net!feeder8.news.weretis.net!news.mixmin.net!aioe.org!Hr3gIpliTCIpUf9B2o38Wg.user.46.165.242.75.POSTED!not-for-mail From: Alain Ketterlin Newsgroups: fr.comp.lang.python Subject: Re: Gestion d'exceptions Python Date: Tue, 28 Dec 2021 16:52:26 +0100 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Message-ID: <87zgokpw05.fsf@universite-de-strasbourg.fr.invalid> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: gioia.aioe.org; logging-data="31335"; posting-host="Hr3gIpliTCIpUf9B2o38Wg.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) X-Notice: Filtered by postfilter v. 0.9.2 Cancel-Lock: sha1:AfnEIM8Sh4W4FJNKqabcMIiB9FU= Bytes: 3594 Lines: 77 zeuwi writes: > J'ai ce bout de code, j'ai lev=C3=A9 une exception, mais je m'=C3=A9tonne= de > voir pourquoi le code continue de tourner alors m=C3=AAme que cette > derni=C3=A8re l=C3=A8ve une exception. Lors des tests dans l'interpr=C3= =A9teur, le > rentre volontairement une ann=C3=A9e n=C3=A9gative, une erreur est bien l= ev=C3=A9e > cependant j'ai le r=C3=A9sultat qui ressort et m'indique qu'il s'agit d'u= ne > ann=C3=A9e non bissextile par exemple. Est ce bien comme cela qu'une > exception doit fonctionner? La clause "except" traite/intercepte l'exception, il sert =C3=A0 cela. L'exception est donc intercept=C3=A9e, et le code se poursuit normalement. C'est exactement ce qui doit se passer. > try: > ann=C3=A9e =3D int(ann=C3=A9e) > if ann=C3=A9e <=3D 0: > raise ValueError("e;L'ann=C3=A9e saisie est n=C3=A9gative= ou nulle"e;) > except ValueError: > print('Erreur lors de la conversion de l'ann=C3=A9e') Le traitement de ton exception consiste ici =C3=A0 afficher un message (puis =C3=A0 continuer comme si de rien n'=C3=A9tait). Ce n'est presque jamais un= e bonne id=C3=A9e. Si tu ne veux pas intercepter l'exception : enl=C3=A8ve try et sa clause except (et aussi print). Si tu veux afficher un message et "re-d=C3=A9clencher" l'exception, utilise except ValueError: print (...) raise Tu peux aussi donner explicitement un nom =C3=A0 l'exception except ValueError as e: print (...) raise e Dans ce cas, le message sera affich=C3=A9 par print, et la suite du code ne sera pas ex=C3=A9cut=C3=A9e (jusqu'=C3=A0 ce qu'un autre bloc try/except in= tercepte l'exception). Dans ton cas, tu veux manifestement ne pas faire le calcul en cas d'erreur. Le code devrait =C3=AAtre ann=C3=A9e =3D input("e;veuillez saisir une ann=C3=A9e: "e;) =20=20=20=20 try: ann=C3=A9e =3D int(ann=C3=A9e) if ann=C3=A9e <=3D 0: raise ValueError("e;L'ann=C3=A9e saisie est n=C3=A9gative ou nu= lle"e;) if ann=C3=A9e % 400 =3D=3D 0 or (ann=C3=A9e % 4 =3D=3D 0 and ann=C3= =A9e % 100 !=3D0): print("e;Bisextile"e;) else:=20 print("e;Non Bisextile"e;) except ValueError: print('Erreur lors de la conversion de l'ann=C3=A9e') J'ai laiss=C3=A9 ces saloperies de '"e;' mais =C3=A7a serait bien que tu no= us les =C3=A9pargnes. (Ou alors est-ce juste chez moi ?) > Cdt, Sans commentaire. -- Alain.