Gestion des exceptions

Imaginons que le programme nécessite d'utiliser une variable de type nombre et que l'utilisateur (ou un autre programme communiquant avec le votre) fournisse un texte : le programme se bloque ou ne fonctionne pas comme attendu. Il faut donc être capable de gérer les exceptions.

Les erreurs qui nécessitent des exceptions sont diverses, en voici quelques-unes :

Erreur de transtypage :

1
float("Voici une phrase")
2
3
ValueError: could not convert string to float: 'Voici une phrase'

Division par zéro :

1
inverse = 1.0/0
2
3
ZeroDivisionError: float division by zero

ExempleExemple simple : redemander une valeur incorrecte.

Écrire un script qui lit la valeur d'un dé à 6 faces entrée par l'utilisateur. Le programme vérifie que celle-ci est comprise entre 1 et 6, sinon il redemande.

Première version sans exception :

1
n = int(input('Valeur du dé : '))
2
while (n < 1) or (n > 6) :
3
    n = int(input('Entre 1 et 6, merci : '))
4
print('La valeur entrée est :', n)

Seconde version, qui évite les erreurs lorsque l'utilisateur entre un texte :

1
while True:                               # Attention, boucle infinie !
2
    try:                                  # On essaie
3
        n = int(input('Valeur du dé : '))
4
        if 1 <= n <= 6 :                  # Test de la valeur entière
5
            break                         # On sort s'il n'y a pas d'exception
6
        else:
7
            print('Entre 1 et 6, merci : ')
8
    except:                               # Il y a une erreur
9
        print('Erreur quelque part, entre 1 et 6, merci : ')   # Message « d'erreur »

ExempleExemple en utilisant les erreurs d'exceptions

Demandons à l'utilisateur un numérateur et un dénominateur pour effectuer une division. Nous aurons ce code simplifié :

1
while True:
2
    try:
3
        x = int(input("Entrer un numérateur :"))
4
        y = int(input("Entrer un dénominateur :"))
5
        print(f"Résultat de la division : {x/y}")
6
    except:
7
        print("Erreur, impossible d'effectuer la division !")

On peut donc améliorer ce programme en utilisant les erreurs vues précédemment :

1
while True:
2
    try:
3
        x = int(input("Entrer un numérateur :"))
4
        y = int(input("Entrer un dénominateur :"))
5
        print(f"Résultat de la division : {x/y}")
6
    except ValueError:
7
        print("Erreur, la valeur rentrée n'est pas un entier valide !")
8
    except ZeroDivisionError:
9
        print("Erreur : impossible de diviser par zéro, voyons !")
10