Gestion des erreurs avec try et except

Gestion des erreurs avec try et except

Ce script permet de faire deviner à l’utilisateur un nombre compris entre 1 et 10 que le programme aura choisi grâce à randint ( ) importé du module intégré random.

from random import randint
nbreAdeviner = randint (1, 10)
reponse = -1
nbreEssais = 0
while reponse < 1 or reponse > 10:
        reponse = input("Choisissez un nombre de 1 à 10 : ")
        try:
                reponse = int(reponse)
        except ValueError:
                print("Vous n'avez pas saisi un nombre mais un autre caractère")
                reponse = -1
                continue
        if reponse < 1 :
            nbreEssais = nbreEssais + 1
            print("Ce nombre est inférieur à 1 !!!")
        elif reponse > 10 :
            nbreEssais = nbreEssais + 1
            print("Ce nombre est supérieur à 10 !!!")
        if reponse == nbreAdeviner :
            nbreEssais = nbreEssais + 1
            print ("Le nombre à deviner entre 1 et 10 est bien ", reponse)
            print ("Vous avez trouvé en ",nbreEssais," essais")
        elif reponse != nbreAdeviner and 1 <= reponse <= 10 :
            nbreEssais = nbreEssais + 1
            print ("Le nombre à deviner entre 1 et 10 n'est pas ", reponse)
            reponse = -1
            continue

Exécution , si je rentre une donnée autre qu'un nombre. Ensuite, je ne fais plus d'erreur.

>>> 
Choisissez un nombre de 1 à 10 : f
Vous n'avez pas saisi un nombre mais un autre caractère
Choisissez un nombre de 1 à 10 : 1
Le nombre à deviner entre 1 et 10 n'est pas  1
Choisissez un nombre de 1 à 10 : 3
Le nombre à deviner entre 1 et 10 est bien  3
Vous avez trouvé en  2  essais

Choisissez un nombre de 1 à 10 : f
Vous n'avez pas saisi un nombre mais un autre caractère

try: Essaie
reponse = int(reponse) convertis reponse en integer
except ValueError: sauf s'il y a une erreur de valeur
print("Vous n'avez pas saisi un nombre mais un autre caractère") écris ...
reponse = -1
continue recommence

Il y a tout un nombre d'erreurs possibles intégrées dans Python, c'est le cas de ValueError. Mais on peut aussi en créer !

Pour bien comprendre :

>>> reponse = input("Choisissez un nombre de 1 à 10 : ")
Choisissez un nombre de 1 à 10 : 3
>>> reponse = int(reponse)
>>> reponse
3
>>> reponse = input("Choisissez un nombre de 1 à 10 : ")
Choisissez un nombre de 1 à 10 : h
>>> reponse = int(reponse)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in 
    reponse = int(reponse)
ValueError: invalid literal for int() with base 10: 'h'
>>>

Si vous rentrez un nombre via la fonction input (pour rappel, la valeur entrée via input () est par défaut une chaîne de caractères ou string), et que vous faites la conversion en integer via la fonction int ( ), tout se passe bien. Mais si vous entrez une chaîne ou string, ici un "h", vous générez une erreur puisque Python ne peut convertir une chaîne en nombre entier.
C'est pour cela que Python a la possibilité de gérer les erreurs via les mots-clés try et except.
Le code suivant montre toutes les possibilités de la procédure

reponse = input("Choisissez un nombre de 1 à 10 : ")
try:
        reponse = int(reponse)
        print (reponse)
except ValueError:
        print("Vous n'avez pas saisi un nombre mais un autre caractère")

else:
        print ("hello")
                
finally :
        print ("coucou")

Exécution :

>>> 
Choisissez un nombre de 1 à 10 : h
Vous n'avez pas saisi un nombre mais un autre caractère
coucou
>>> ================================ RESTART ================================
>>> 
Choisissez un nombre de 1 à 10 : 1
1
hello
coucou

Le code sous le mot-clé finally s'exécute quoi qu'il arrive et le code sous else s'exécute s'il n'y a pas d'erreur détectée.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *