Créer des exceptions personnalisées en Python

Rayven Esplanada 10 octobre 2023
  1. Créer une classe d’exception personnalisée en Python
  2. Exécuter la gestion des exceptions à l’aide du bloc try...except en Python
Créer des exceptions personnalisées 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 bloc try 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 instruction print(). Il peut y avoir plus d’un bloc except dans un même bloc try, chacun attrapant des exceptions différentes.
  • else (facultatif) - Ce bloc facultatif est l’endroit où le programme continuera si le bloc try 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.

Rayven Esplanada avatar Rayven Esplanada avatar

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

Article connexe - Python Exception