Créer des exceptions personnalisées en Python
- Créer une classe d’exception personnalisée en Python
-
Exécuter la gestion des exceptions à l’aide du bloc
try...except
en Python
Ce didacticiel montrera que vous pouvez créer des classes d’exceptions personnalisées en Python. Ici, nous montrerons comment effectuer correctement la gestion des exceptions, définir des classes d’exceptions personnalisées et remplacer les exceptions intégrées existantes.
Les exceptions sont un type d’événement qui se produit chaque fois que quelque chose dans un programme ne se déroule pas comme prévu ou perturbe le flux du cas d’utilisation prévu du programme. Sans gestion des exceptions, le programme cessera de s’exécuter entièrement et l’exception devra être soit corrigée, soit gérée.
Créer une classe d’exception personnalisée en Python
La création d’une classe d’exception en Python se fait de la même manière qu’une classe normale. La principale différence est que vous devez inclure la classe de base Exception
de Python pour informer le compilateur que la classe que vous créez est une classe d’exception.
Testons cette méthode pour créer une classe d’exception appelée DemoException
et utilisons le mot-clé de flux de contrôle d’espace réservé pass
à l’intérieur comme espace réservé.
class DemoException(Exception):
pass
Exécuter la levée d’exceptions à l’aide du mot-clé raise
en Python
Pour tester la classe DemoException
et voir ce qu’elle affiche lorsqu’elle est réellement déclenchée, effectuez une levée d’exception. La levée d’exceptions est synonyme de levée d’exceptions dans d’autres langages de programmation.
À l’aide du mot-clé raise
, déclenchez une exception en utilisant la classe d’exception donnée et génère un message d’exception.
class DemoException(Exception):
pass
raise DemoException
Production:
Traceback (most recent call last):
File "/Users/demo/python/demo_exception.py", line 4, in <module>
raise DemoException
__main__.DemoException
Une exception standard ressemblera au terminal si aucun message d’exception personnalisé n’a été déclaré.
Déclarer un message d’exception personnalisé en Python
Pour déclarer un message d’exception personnalisé pour DemoException
, remplacez la méthode __init__()
de la classe d’exception et incluez le message qui doit être généré pour l’exception dans les paramètres, ainsi que le paramètre auto-référentiel obligatoire self
.
Par exemple, redéfinissons la méthode __init__()
et créons un message personnalisé pour la classe DemoException
:
class DemoException(Exception):
def __init__(self, message):
super().__init__(message)
Notez que pour que le message soit intégré avec succès dans votre exception, appelez la classe de base Exception
, la méthode __init__()
, et incluez le message
comme argument.
Appelons à nouveau la classe d’exception en utilisant le mot-clé raise
, et maintenant, en passant un message personnalisé avec :
class DemoException(Exception):
def __init__(self, message):
super().__init__(message)
message = "Exception Triggered! Something went wrong."
raise DemoException(message)
La sortie devrait ressembler à ceci :
Traceback (most recent call last):
File "/Users/demo/python/helloworld.py", line 6, in <module>
raise DemoException(message)
__main__.DemoException: Exception Triggered! Something went wrong.
Nous avons maintenant créé et déclenché avec succès une classe d’exception avec un message d’erreur personnalisé.
Pour les situations réelles qui peuvent déclencher une exception, comment traitons-nous et levons-nous ces exceptions ? Vous pouvez résoudre ce problème proprement en implémentant la gestion des exceptions à l’aide du bloc try...except
.
Exécuter la gestion des exceptions à l’aide du bloc try...except
en Python
Le bloc try...except
ressemble beaucoup au bloc try-catch
dans d’autres langages comme Java.
Le bloc try...except
comporte 2 blocs principaux et 2 blocs optionnels :
try
(obligatoire) - Le bloc principal chargé d’encapsuler le bloc de code où l’exception peut être déclenchée. Le bloctry
arrête tout le processus qu’il contient chaque fois qu’une exception est déclenchée.except
(obligatoire) - Le programme de bloc se poursuit à chaque fois qu’une exception spécifiée est déclenchée. Ce bloc contient généralement un message d’erreur descriptif pour l’appelant ou simplement une simple instructionprint()
. Il peut y avoir plus d’un blocexcept
dans un même bloctry
, chacun attrapant des exceptions différentes.else
(facultatif) - Ce bloc facultatif est l’endroit où le programme continuera si le bloctry
n’a déclenché aucune exception.finally
(facultatif) - Ce bloc facultatif s’exécute une fois que tout a été exécuté dans les 3 blocs précédents, qu’une exception soit déclenchée ou non.
Utilisons l’exemple précédent utilisant la classe DemoException
pour essayer un simple bloc try...except
.
Tout d’abord, enveloppez le mot-clé raise
dans une fonction et placez-le dans le bloc try...except
.
La fonction que nous allons créer pour cet exemple est une fonction qui accepte un nombre et lève une exception si elle envoie 0
. S’il envoie un autre numéro, le code se déroulera comme prévu. Vérifiez l’exemple ci-dessous :
class DemoException(Exception):
def __init__(self, message):
super().__init__(message)
message = "Exception Triggered! Something went wrong."
def triggerException(num):
if num == 0:
raise DemoException(message)
else:
print(num)
try:
triggerException(0)
print("Code has successfully been executed.")
except DemoException:
print("Error: Number should not be 0.")
Étant donné que triggerException()
a passé 0
en argument, le code doit déclencher DemoException
. Ici, nous devrions nous attendre à ce que le message du mot-clé raise
soit remplacé par tout ce qui se trouve à l’intérieur du bloc except
en tant que sortie.
Notez que la ligne print()
après l’appel de la fonction triggerException()
n’a pas été affichée. C’est parce que la fonction a déclenché une exception ; par conséquent, il a immédiatement arrêté tous les processus dans le bloc try
et est passé directement au bloc except
.
Production:
Error: Number should not be 0.
Maintenant, essayons de passer un nombre valide comme 20
, par exemple.
try:
triggerException(20)
print("Code has successfully been executed.")
except DemoException:
print("Error: Number should not be 0.")
Production:
20
Code has successfully been executed.
Essayons d’enchaîner les blocs except
et de créer une autre exception. Appelons la nouvelle exception NumberFormatException
, qui se déclenche si l’entrée donnée n’est pas un nombre. Pour cette classe d’exception, déclarons le message à l’intérieur de la classe.
class NumberFormatException(Exception, value):
message = f"{value} is not a number"
def __init__(self):
super().__init__(message)
Maintenant, modifiez le code ci-dessus pour gérer la nouvelle classe d’exception NumberFormatException
:
class DemoException(Exception):
def __init__(self, message):
super().__init__(message)
class NumberFormatException(Exception):
def __init__(self, message, value):
message = f"{value} is not a number"
super().__init__(message)
message = "Exception occured."
def triggerException(num):
if not num.isdigit():
raise NumberFormatException(message, num)
elif num == 0:
raise DemoException(message)
else:
print(num)
num = "sample string"
try:
triggerException(num)
print("Code has successfully been executed.")
except DemoException:
print("Error: Number should not be 0.")
except NumberFormatException:
print(num + " is not a number.")
Dans ce code, la valeur de num
qui a été passée à triggerException()
est une chaîne 'sample string'
donc la NumberFormatException
doit être déclenchée.
Production:
sample string is not a number.
En résumé, créer des exceptions personnalisées en Python est aussi simple que de créer une nouvelle classe, mais avec la classe Exception
comme argument supplémentaire dans la définition de classe. Le mot-clé raise
est utilisé pour déclencher des exceptions compte tenu de la classe d’exception. Les blocs try...except
sont utilisés pour envelopper une ou plusieurs exceptions dans un bloc de code et modifier ce que le code fait lors de la gestion de cette exception et pas seulement pour arrêter complètement le programme.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn