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 :
Division par zéro :
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)
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 »
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 !")
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 !")
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 !")