Comment définir des exceptions personnalisées en Python? (Avec des exemples)

Dans ce didacticiel, vous apprendrez à définir des exceptions personnalisées en fonction de vos besoins à l'aide d'exemples.

Python a de nombreuses exceptions intégrées qui obligent votre programme à générer une erreur en cas de problème dans le programme.

Cependant, vous devrez parfois créer vos propres exceptions personnalisées qui répondent à vos besoins.

Création d'exceptions personnalisées

En Python, les utilisateurs peuvent définir des exceptions personnalisées en créant une nouvelle classe. Cette classe d'exception doit être dérivée, directement ou indirectement, de la Exceptionclasse intégrée . La plupart des exceptions intégrées sont également dérivées de cette classe.

 >>> class CustomError(Exception):… pass… >>> raise CustomError Traceback (most recent call last):… __main__.CustomError >>> raise CustomError("An error occurred") Traceback (most recent call last):… __main__.CustomError: An error occurred

Ici, nous avons créé une exception définie par l'utilisateur appelée CustomErrorqui hérite de la Exceptionclasse. Cette nouvelle exception, comme d'autres exceptions, peut être déclenchée à l'aide de l' raiseinstruction avec un message d'erreur facultatif.

Lorsque nous développons un grand programme Python, il est recommandé de placer toutes les exceptions définies par l'utilisateur que notre programme déclenche dans un fichier séparé. De nombreux modules standard le font. Ils définissent leurs exceptions séparément comme exceptions.pyou errors.py(généralement mais pas toujours).

La classe d'exception définie par l'utilisateur peut implémenter tout ce qu'une classe normale peut faire, mais nous les rendons généralement simples et concis. La plupart des implémentations déclarent une classe de base personnalisée et dérivent d'autres classes d'exception à partir de cette classe de base. Ce concept est clarifié dans l'exemple suivant.

Exemple: exception définie par l'utilisateur en Python

Dans cet exemple, nous illustrerons comment les exceptions définies par l'utilisateur peuvent être utilisées dans un programme pour déclencher et détecter des erreurs.

Ce programme demandera à l'utilisateur d'entrer un nombre jusqu'à ce qu'il devine correctement un numéro enregistré. Pour les aider à le comprendre, un indice est fourni pour savoir si leur estimation est supérieure ou inférieure au nombre stocké.

 # define Python user-defined exceptions class Error(Exception): """Base class for other exceptions""" pass class ValueTooSmallError(Error): """Raised when the input value is too small""" pass class ValueTooLargeError(Error): """Raised when the input value is too large""" pass # you need to guess this number number = 10 # user guesses a number until he/she gets it right while True: try: i_num = int(input("Enter a number: ")) if i_num number: raise ValueTooLargeError break except ValueTooSmallError: print("This value is too small, try again!") print() except ValueTooLargeError: print("This value is too large, try again!") print() print("Congratulations! You guessed it correctly.")

Voici un exemple d'exécution de ce programme.

Entrez un nombre: 12 Cette valeur est trop grande, réessayez! Entrez un nombre: 0 Cette valeur est trop petite, réessayez! Entrez un nombre: 8 Cette valeur est trop petite, réessayez! Entrez un nombre: 10 Félicitations! Vous l'avez deviné correctement.

Nous avons défini une classe de base appelée Error.

Les deux autres exceptions ( ValueTooSmallErroret ValueTooLargeError) qui sont réellement déclenchées par notre programme sont dérivées de cette classe. C'est la manière standard de définir les exceptions définies par l'utilisateur dans la programmation Python, mais vous n'êtes pas limité à cette seule manière.

Personnalisation des classes d'exception

Nous pouvons personnaliser davantage cette classe pour accepter d'autres arguments selon nos besoins.

Pour en savoir plus sur la personnalisation des classes d'exception, vous devez avoir les connaissances de base de la programmation orientée objet.

Visitez la programmation orientée objet Python pour commencer à apprendre la programmation orientée objet en Python.

Regardons un exemple:

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Production

 Entrez le montant du salaire: 2000 Traceback (dernier appel le plus récent): Fichier "", ligne 17, dans l'augmentation SalaryNotInRangeError (salaire) __main __. SalaryNotInRangeError: Le salaire n'est pas dans la plage (5000, 15000)

Ici, nous avons remplacé le constructeur de la Exceptionclasse pour accepter nos propres arguments personnalisés salaryet message. Ensuite, le constructeur de la Exceptionclasse parent est appelé manuellement avec l' self.messageargument using super().

L' self.salaryattribut personnalisé est défini pour être utilisé ultérieurement.

La __str__méthode héritée de la Exceptionclasse est ensuite utilisée pour afficher le message correspondant lorsqu'elle SalaryNotInRangeErrorest déclenchée.

Nous pouvons également personnaliser la __str__méthode elle-même en la remplaçant.

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'(self.salary) -> (self.message)' salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Production

 Entrez le montant du salaire: 2000 Traceback (dernier appel le plus récent): Fichier "/home/bsoyuj/Desktop/Untitled-1.py", ligne 20, en augmentation SalaryNotInRangeError (salaire) __main __. SalaryNotInRangeError: 2000 -> Salary is not in ( Gamme 5000, 15000)

Pour en savoir plus sur la manière de gérer les exceptions en Python, consultez la page Gestion des exceptions Python.

Articles intéressants...