Gestion des Exceptions Python
En informatique et en programmation informatique, la gestion des exceptions est le processus de réponse à l'occurrence d'exceptions – des conditions anormales ou exceptionnelles nécessitant un traitement spécial.
Python possède de nombreuses exceptions intégrées qui sont levées lorsqu’un programme rencontre une erreur, et la plupart des bibliothèques externes, comme la populaire Requests, incluent ses propres exceptions personnalisées que nous devrons gérer.
Gestion des exceptions de base
Vous ne pouvez pas diviser par zéro, c’est une vérité mathématique, et si vous essayez de le faire en Python, l’interpréteur lèvera l’exception intégrée ZeroDivisionError :
def divide(dividend , divisor):
print(dividend / divisor)
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Supposons que nous ne voulions pas que notre programme arrête son exécution ou n’affiche à l’utilisateur un résultat qu’il ne comprendra pas. Disons que nous voulons imprimer un message utile et clair, alors nous devons gérer l’exception avec les mots-clés try et except :
# try-except: gérer les exceptions avec élégance
def divide(dividend , divisor):
try: # Essayer d'exécuter ce code
print(dividend / divisor)
except ZeroDivisionError: # Capturer le type d'exception spécifique
print('Vous ne pouvez pas diviser par 0')
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Vous ne pouvez pas diviser par 0
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
try et exceptcatch et handleerror et rescueif et elseGestion de multiples exceptions à l’aide d’un seul bloc d’exception
Vous pouvez également gérer plusieurs exceptions sur une seule ligne comme suit sans avoir besoin de créer plusieurs blocs d’exception.
# Gérer plusieurs exceptions dans un seul bloc except
def divide(dividend , divisor):
try:
if (dividend == 10):
var = 'str' + 1 # Ceci lèvera TypeError
else:
print(dividend / divisor)
except (ZeroDivisionError, TypeError) as error: # Capturer plusieurs types d'exceptions
print(error) # Afficher le message d'erreur
divide(dividend=20, divisor=5)
4
divide(dividend=10, divisor=5)
can only concatenate str (not "int") to str
divide(dividend=10, divisor=0)
division by zero
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
except ?except séparés pour chaque type d'exceptionexcept (Exception1, Exception2)Code Finally dans la gestion des exceptions
Le code à l’intérieur de la section finally est toujours exécuté, qu’une exception ait été levée ou non :
# Bloc finally : s'exécute toujours, quelles que soient les exceptions
def divide(dividend , divisor):
try:
print(dividend / divisor)
except ZeroDivisionError:
print('Vous ne pouvez pas diviser par 0')
finally: # S'exécute toujours, même si une exception se produit
print('Exécution terminée')
divide(dividend=10, divisor=5)
2.0
Exécution terminée
divide(dividend=10, divisor=0)
Vous ne pouvez pas diviser par 0
Exécution terminée
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
finally s'exécute-t-il ?Exceptions personnalisées
Les exceptions personnalisées s’initialisent en créant une class qui hérite de la classe de base Exception de Python, et sont levées à l’aide du mot-clé raise :
# Exception personnalisée : créée en héritant de la classe Exception
class MyCustomException(Exception):
pass
raise MyCustomException # Lever l'exception personnalisée
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException
Pour déclarer un message d’exception personnalisé, vous pouvez le passer comme paramètre :
class MyCustomException(Exception):
pass
raise MyCustomException('Un message personnalisé pour mon exception personnalisée')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException: Un message personnalisé pour mon exception personnalisée
La gestion d’une exception personnalisée est la même que pour toute autre :
try:
raise MyCustomException('Un message personnalisé pour mon exception personnalisée')
except MyCustomException:
print('Mon exception personnalisée a été levée')
Mon exception personnalisée a été levée
Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage
Exception@exceptionException.create()