Re: Gestion d'exceptions Python

Liste des GroupesRevenir à fcl python 
Sujet : Re: Gestion d'exceptions Python
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.python
Date : 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.

Date Sujet#  Auteur
28 Dec 21 * Gestion d'exceptions Python4zeuwi
28 Dec 21 `* Re: Gestion d'exceptions Python3Alain Ketterlin
28 Dec 21  `* Re: Gestion d'exceptions Python2Olivier Miakinen
29 Dec 21   `- Re: Gestion d'exceptions Python1Alain Ketterlin

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal