Intercepter des exceptions
Avant d’écrire vos propres exceptions personnalisées, assurez-vous de maîtriser les bases de la gestion des exceptions.
Dans cet exercice, on vous donne une fonction invert_at_index(x, ind) qui prend deux arguments, une liste x et un indice ind, et inverse l’élément de la liste à cet indice. Par exemple, invert_at_index([5,6,7], 1) renvoie 1/6, soit 0.166666.
Essayez d’exécuter le code tel quel et examinez le résultat dans la console. Il y a deux opérations risquées dans cette fonction : d’abord, si l’élément que l’on essaie d’inverser vaut 0, le code déclenchera une exception ZeroDivisionError. Ensuite, si l’indice passé à la fonction est hors limites pour la liste, le code déclenchera une IndexError. Dans les deux cas, le script sera interrompu, ce qui peut ne pas être souhaitable.
Cet exercice fait partie du cours
Programmation orientée objet en Python
Instructions
Utilisez un schéma try - except - except (avec deux blocs except) à l’intérieur de la fonction pour intercepter et gérer deux exceptions comme suit :
tryexécutez le code tel quel,- si une
ZeroDivisionErrorsurvient, affichez"Cannot divide by zero!", - si une
IndexErrorsurvient, affichez"Index out of range!"
Vous saurez que tout est correct si le code s’exécute sans erreurs et que la console affiche :
0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
return 1/x[ind]
a = [5,6,0,7]
# Works okay
print(invert_at_index(a, 1))
# Potential ZeroDivisionError
print(invert_at_index(a, 2))
# Potential IndexError
print(invert_at_index(a, 5))