Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3701

Re: Gestion d'exceptions Python

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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