Maîtriser la gestion d'exceptions Python : utiliser try, except, finally et raise efficacement
Maîtriser la gestion d'exceptions Python : utiliser try, except, finally et raise efficacement
Qu'est-ce que la gestion d'exceptions en Python ?
Une exception est une erreur qui se produit au moment de l'exécution d'un programme. Cependant, pendant l'exécution d'un programme, Python génère une exception qui doit être gérée pour éviter que votre programme ne plante. En Python, les exceptions se déclenchent automatiquement sur les erreurs, ou elles peuvent être déclenchées et interceptées par votre code.
L'exception indique que, bien que l'événement puisse se produire, ce type d'événement arrive rarement. Quand la méthode n'est pas capable de gérer l'exception, elle est lancée vers sa fonction appelante. Finalement, quand une exception est lancée hors de la fonction principale, le programme se termine brutalement.
Dans ce tutoriel sur la gestion d'exceptions Python, vous apprendrez :
- Qu'est-ce qu'une exception en Python ?
- Exemples courants d'exceptions
- Pourquoi utiliser les exceptions ?
- Règles des exceptions
- Mécanisme de gestion d'exceptions Python
- Instruction try Python
- Instruction except Python
- Instruction raise en Python
- Erreurs Python importantes
- Autres exceptions Python importantes
- Erreur vs Exceptions
Exemples courants d'exceptions :
- Division par zéro
- Accès à un fichier qui n'existe pas
- Addition de deux types incompatibles
- Tentative d'accès à un index inexistant d'une séquence
- Suppression de la table depuis un serveur de base de données déconnecté
- Retrait ATM supérieur au montant disponible
Pourquoi utiliser les exceptions ?
Voici les raisons d'utiliser les exceptions en Python :
- La gestion d'exceptions permet de séparer le code de gestion d'erreurs du code normal.
- Une exception est un objet Python qui représente une erreur.
- Comme les commentaires de code, les exceptions vous aident à vous rappeler ce que le programme attend.
- Elles clarifient le code et améliorent la lisibilité.
- Permettent de stimuler les conséquences car la gestion d'erreurs se fait en un seul endroit et d'une seule manière.
- Une exception est une méthode commode pour gérer les messages d'erreur.
- En Python, vous pouvez lever une exception dans le programme en utilisant la méthode raise exception.
- Lever une exception aide à interrompre l'exécution du code courant et renvoie l'exception jusqu'à ce qu'elle soit gérée.
- Traitement des exceptions pour les composants qui ne peuvent pas les gérer directement.
Règles des exceptions
Voici quelques règles essentielles de la gestion d'exceptions Python :
- Les exceptions doivent être des objets de classe
- Pour les exceptions de classe, vous pouvez utiliser l'instruction try avec une clause except qui mentionne une classe particulière.
- Même si une instruction ou expression est syntaxiquement correcte, elle peut afficher une erreur lors de l'exécution.
- Les erreurs trouvées pendant l'exécution sont appelées exceptions, et elles ne sont pas inconditionnellement fatales.
Mécanisme de gestion d'exceptions Python
La gestion d'exceptions est gérée par les 5 mots-clés suivants :
- try
- except
- finally
- raise
Instruction try Python
Une instruction try inclut le mot-clé try, suivi de deux-points (:) et d'une suite de code dans laquelle des exceptions peuvent survenir. Elle a une ou plusieurs clauses.
Pendant l'exécution de l'instruction try, si aucune exception ne s'est produite, l'interpréteur ignore les gestionnaires d'exceptions pour ce try spécifique.
Si une exception se produit dans une suite try, la suite try expire et le contrôle du programme se transfère au gestionnaire except correspondant suivant la suite try.
Syntaxe :
try:
instruction(s)
L'instruction except
Les blocs except prennent un argument à la fois, qui est le type d'exception qu'ils sont susceptibles d'attraper. Ces arguments peuvent aller d'un type d'exception spécifique à une catégorie "attraper-tout" d'exceptions.
Règles pour le bloc except :
- Vous pouvez définir un bloc except en utilisant le mot-clé except
- Le paramètre d'exception est toujours entre parenthèses
- Il représente toujours le type d'exception que le bloc except gère.
- Un code de gestion d'exception est écrit entre deux accolades {}.
- Vous pouvez placer plusieurs blocs except dans un seul bloc try.
- Vous pouvez utiliser un bloc except seulement après le bloc try.
- Tous les blocs except doivent être ordonnés de la sous-classe vers la super-classe d'exception.
Exemple :
try:
# code risqué
except IndexError as e:
print("IndexError attrapé :", e)
except Exception as e:
print("Autre exception :", e)
Instruction finally en Python
Le bloc finally s'exécute toujours, indépendamment de si une exception a été levée ou non. Le mot-clé finally vous permet de créer un bloc de code qui suit un bloc try-except.
La clause finally est optionnelle. Elle est destinée à définir des actions de nettoyage qui doivent être exécutées dans toutes les conditions.
try:
raise KeyboardInterrupt
finally:
print('Bienvenue, monde !')
# Sortie :
# Bienvenue, monde !
# KeyboardInterrupt
La clause finally s'exécute avant la fin du bloc try.
Instruction raise en Python
L'instruction raise spécifie un argument qui initialise l'objet exception. Ici, une virgule suit le nom de l'exception, et l'argument ou tuple d'arguments qui suit la virgule.
Syntaxe :
raise [Exception [, args [, traceback]]]
Dans cette syntaxe, l'argument est optionnel, et au moment de l'exécution, la valeur de l'argument d'exception est toujours None.
Exemple :
Une exception Python peut être n'importe quelle valeur comme une chaîne, classe, nombre ou objet. La plupart de ces exceptions levées par le noyau Python sont des classes avec un argument qui est une instance de la classe.
# Lever une exception personnalisée
raise ValueError("Valeur invalide fournie")
Erreurs Python importantes
| Type d'erreur | Description |
|---|---|
| ArithmeticError | Classe de base pour toutes les exceptions arithmétiques. Levée pour les erreurs dans les opérations arithmétiques. |
| ImportError | Levée quand vous essayez d'importer un module qui n'est pas présent. Se produit si vous avez fait une faute de frappe dans le nom du module ou si le module n'est pas dans le chemin standard. |
| IndexError | Levée quand vous essayez de référencer une séquence hors limites. |
| KeyError | Quand une clé spécifique n'est pas trouvée dans un dictionnaire, une exception KeyError est levée. |
| NameError | Levée quand un nom est référencé dans le code mais n'existe jamais dans l'espace de noms local ou global. |
| ValueError | Levée quand une fonction ou opération intégrée reçoit un argument de type correct mais de valeur inappropriée. |
| EOFError | Levée quand une des fonctions intégrées (input()) atteint une condition EOF sans lire de données. |
| ZeroDivisionError | Levée quand une division ou modulo par zéro a lieu pour tous les types numériques. |
| IOError | Levée quand une opération d'entrée/sortie échoue. |
| SyntaxError | Levée quand il y a une erreur dans la syntaxe Python. |
| IndentationError | Levée quand l'indentation n'est pas correctement définie. |
Autres exceptions Python importantes
| Exception | Description |
|---|---|
| ArithmeticException | Erreur arithmétique, telle que division par zéro. |
| ArrayIndexOutOfBoundsException | Index de tableau hors limites. |
| ArrayStoreException | Assignation vers un élément de tableau de type incompatible. |
| ClassCastException | Cast invalide |
| IllegalMonitorStateException | Opération moniteur illégale, comme attendre sur un thread non verrouillé. |
| IllegalStateException | Environnement ou application dans un état incorrect. |
| ClassNotFoundException | Classe non trouvée. |
| CloneNotSupportedException | Tentative de cloner un objet qui n'implémente pas l'interface Cloneable. |
| IllegalAccessException | Accès à une classe refusé. |
| InstantiationException | Se produit quand vous tentez de créer un objet d'une interface ou classe abstraite. |
Erreur vs Exceptions
| Erreur | Exceptions |
|---|---|
| Toutes les erreurs en Python sont du type non-vérifié. | Les exceptions incluent les types vérifiés et non-vérifiés. |
| Les erreurs surviennent à l'exécution, inconnues du compilateur. | Les exceptions peuvent être récupérées en les gérant avec des blocs try-except. |
| Les erreurs sont principalement causées par l'environnement d'exécution. | L'application elle-même cause les exceptions. |
| Exemples : OutOfMemoryError | Exemples : Exceptions vérifiées, SQLException, NullPointerException, etc. |
Résumé
- Une exception est une erreur survenue pendant l'exécution d'un programme.
- L'exception indique que, bien que l'événement puisse se produire, ce type d'événement arrive rarement.
- Exemples courants : 1) Division par zéro, 2) Accès à un fichier inexistant, 3) Addition de types incompatibles.
- Une exception est un objet Python qui représente une erreur.
- Une instruction try inclut le mot-clé try, suivi de deux-points (:) et d'une suite de code où des exceptions peuvent survenir.
- Les blocs except prennent un argument à la fois, qui est le type d'exception qu'ils sont susceptibles d'attraper.
- L'instruction raise spécifie un argument qui initialise l'objet exception.
- Le bloc finally s'exécute toujours, indépendamment d'une exception levée ou non.
Python
- Maîtriser les types de données Python : Guide pratique
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser l'instruction pass en Python : Guide pratique
- Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
- Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
- Maîtriser la gestion d'exceptions Python : try, except, else et finally expliqués
- Maîtriser les itérateurs Python : fonctionnement et création des vôtres
- Les fermetures Python expliquées : comment les fonctions imbriquées capturent les variables
- Maîtriser la gestion d'exceptions Java : try, catch, finally, throw et throws expliqués