1. A propos des exceptions en Python
Les exceptions en Python sont des événements qui se produisent pendant l'exécution d'un programme et qui interrompent le flux normal d'instructions. Lorsqu'une exception survient, le programme cherche un gestionnaire d'exception approprié pour la traiter. Si aucun gestionnaire n'est trouvé, le programme s'arrête et affiche une trace d'erreur.En Python, les exceptions sont gérées via des blocs try-except. Les erreurs peuvent être prévues (comme une division par zéro) ou imprévues (comme l'accès à un indice invalide dans une liste).
2. Etude d'un exemple
Considérons le code suivant qui permet de calculer le quotient de deux nombres a et b:
1 2 3 |
a = int(input("Saisir la valeur de a : ")) b = int(input("Saisir la valeur de b : ")) print("Le quotient de a par b est : a/b = " , a/b) |
Si vous exécutez le code ci-dessus en donnant a = 6 et b = 3, le programme renvoie :
Le quotient de a par b est : a/b = 2.0
L'exécution ne rencontre aucun problème!
Mais si l'utilisateur donne a = 6 et b = 0 le programme renvoie le message d'erreur :
builtins.ZeroDivisionError: division by zero.
En plus l’interpréteur python arrête l'exécution du code !
Afin d’éviter ce message d'erreur, et continuez à exécuter la suite du code, on utilise la structure Try ... except
1 2 3 4 5 6 |
try: instruction à exécuter s'il n'y a pas d'erreur! except: instruction pour gérer l'erreur finally: # bloc de code qui sera toujours exécuté |
- Le bloc try : permet de tester un bloc de code s'il contient des erreurs ou non et ne l'exécute que s'il ne contient aucune erreur! Dans le cas contraire le programme ignore la totalité du code dans ce bloc et passe au bloc suivant except.
- Le bloc except : vous permet de gérer l'erreur.
- Le bloc finally : vous permet d'exécuter du code, quel que soit le résultat des blocs try et except.
3. Gestion des esceptions
Lorsque l'exécution d'un programme en Python rencontre une erreur, également appelée exception, le flux normal du programme est interrompu, et Python génère un message d'erreur pour indiquer la nature du problème. Ce mécanisme permet d'identifier et de signaler des conditions anormales pendant l'exécution du programme.
La gestion des exceptions en Python se fait à l'aide de l'instruction try. L'idée est de mettre le code susceptible de générer une exception dans un bloc try, et de spécifier comment traiter cette exception dans un bloc except associé. Ainsi, le programme peut anticiper des erreurs potentielles et prendre des mesures pour y faire face, plutôt que de simplement s'arrêter brusquement.
Exemple
1 2 3 4 5 6 |
a = int(input("Tapez la valeur de a : ")) b = int(input("Tapez la valeur de b : ")) try: print("Le quotient de a par b est : a/b = " , a/b) except: print("Veuillez choisir une valeur b non nulle !") |
Dans ce cas si vous donnez a = 6 et b = 0, le programme ignore le code du bloc try après avoir détecté une erreur et passe automatiquement au code du bloc except et renvoie donc:
Veuillez choisir une valeur b non nulle !
4. Exception utilisant l'instruction raise
On peut se demander maintenant s'il est possible de lever une exception sans rencontrer une erreur! Exemple pour un programme qui demande à l'utilisateur de tapez son age et de lever une exception si l'age est < 18 ans ! Bien entendu un age tapé qui est inférieur à 18 ans est une opération qui ne contient aucune erreur, et pourtant on peut quand même en lever une :
1 2 3 4 5 6 7 8 |
try: age = int(input("Veuille saisir votre age")) if age < 18: raise ValueError else: print("age valide") except : print("age non valide !") |
5. L'instruction finally
L'instruction finally est utilisée pour exécuter des instructions quelque soit les erreurs générées ou non. Dans tous les cas (présence d'erreurs ou non ! ) l'instruction déclarée dans le block finally sera executée.
Syntaxe
1 2 3 4 |
try: # bloc de code pouvant probablement lever une exeption finally: # bloc de code qui sera toujours exécuté |
6. Quiz
a) Une erreur de logique dans le code.
b) Un avertissement du linter.
c) Un événement anormal qui se produit pendant l'exécution et interrompt le flux normal du programme.
d) Une erreur due à une indentation incorrecte.
a) catch
b) exception
c) try
d) handle
a) Exécute le code à risque.
b) Exécute le code seulement s'il n'y a pas d'exception.
c) Exécute le code spécifié en cas d'exception.
d) Génère une exception.
a) Exécute le code seulement s'il n'y a pas d'exception.
b) Exécute le code à risque.
c) Exécute le code spécifié en cas d'exception.
d) Exécute le code quel que soit le résultat du bloc try (avec ou sans exception).
a) except ErrorType:
b) catch ErrorType:
c) except ExceptionType:
d) catch ExceptionType:
a) Exécute le code seulement s'il n'y a pas d'exception.
b) Exécute le code à risque.
c) Exécute le code spécifié en cas d'exception.
d) Exécute le code quel que soit le résultat du bloc try (avec ou sans exception).
a) Améliorer la performance du programme.
b) Simplifier la syntaxe du code.
c) Gérer des situations d'erreur de manière élégante.
d) Faciliter la lecture du code.
a) En utilisant le mot-clé exception.
b) En levant une exception avec raise.
c) En utilisant try et except uniquement.
d) En utilisant catch et throw.
a) ZeroDivisionError
b) ValueError
c) TypeError
d) MathError
a) Le programme s'arrête.
b) Le bloc except est exécuté.
c) Le bloc else est exécuté.
d) Le programme continue avec le reste du code après le bloc try.
- Exercice 1 : c)
- Exercice 2 : c)
- Exercice 3 : c)
- Exercice 4 : d)
- Exercice 5 : c)
- Exercice 6 : a)
- Exercice 7 : c)
- Exercice 8 : b)
- Exercice 9 : a)
- Exercice 10: d)
Younes Derfoufi
CRMEF OUJDA