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 :
float("Voici une phrase")
ValueError: could not convert string to float: 'Voici une phrase'
Division par zéro :
inverse = 1.0/0
ZeroDivisionError: float division by zero
Exemple : Exemple 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 :
n = int(input('Valeur du dé : '))
while (n < 1) or (n > 6) :
n = int(input('Entre 1 et 6, merci : '))
print('La valeur entrée est :', n)
Seconde version, qui évite les erreurs lorsque l'utilisateur entre un texte :
while True: # Attention, boucle infinie !
try: # On essaie
n = int(input('Valeur du dé : '))
if 1 <= n <= 6 : # Test de la valeur entière
break # On sort s'il n'y a pas d'exception
else:
print('Entre 1 et 6, merci : ')
except: # Il y a une erreur
print('Erreur quelque part, entre 1 et 6, merci : ') # Message « d'erreur »
Exemple : Exemple 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é :
while True:
try:
x = int(input("Entrer un numérateur :"))
y = int(input("Entrer un dénominateur :"))
print(f"Résultat de la division : {x/y}")
except:
print("Erreur, impossible d'effectuer la division !")
On peut donc améliorer ce programme en utilisant les erreurs vues précédemment :
while True:
try:
x = int(input("Entrer un numérateur :"))
y = int(input("Entrer un dénominateur :"))
print(f"Résultat de la division : {x/y}")
except ValueError:
print("Erreur, la valeur rentrée n'est pas un entier valide !")
except ZeroDivisionError:
print("Erreur : impossible de diviser par zéro, voyons !")