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 Exception
classe 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 CustomError
qui hérite de la Exception
classe. Cette nouvelle exception, comme d'autres exceptions, peut être déclenchée à l'aide de l' raise
instruction 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.py
ou 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 ( ValueTooSmallError
et 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 Exception
classe pour accepter nos propres arguments personnalisés salary
et message
. Ensuite, le constructeur de la Exception
classe parent est appelé manuellement avec l' self.message
argument using super()
.
L' self.salary
attribut personnalisé est défini pour être utilisé ultérieurement.
La __str__
méthode héritée de la Exception
classe est ensuite utilisée pour afficher le message correspondant lorsqu'elle SalaryNotInRangeError
est 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.