logo

Exceptions définies par l'utilisateur en Python avec exemples

Les exceptions définies par l'utilisateur sont créées en définissant une nouvelle classe qui hérite de L'exception intégrée de Python classe ou une de ses sous-classes. En faisant cela, nous pouvons créer des messages d'erreur personnalisés et gérer des erreurs spécifiques d'une manière logique pour notre application.

Étapes pour créer et utiliser des exceptions définies par l'utilisateur

Suivez ces étapes pour créer et utiliser des exceptions définies par l'utilisateur en Python :



  • Définissez une nouvelle classe d'exception : Créez une nouvelle classe qui hérite d'Exception ou de l'une de ses sous-classes.
  • Lever l'exception : Utilisez l'instruction raise pour déclencher l'exception définie par l'utilisateur lorsqu'une condition spécifique se produit.
  • Gérer l'exception : Utilisez des blocs try-sauf pour gérer l'exception définie par l'utilisateur.

Exemple: Dans cet exemple, nous créons une exception personnalisée InvalidAgeError pour garantir que les valeurs d'âge se situent dans une plage valide (0 à 120).

Python
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Sortir
150 -> Age must be between 0 and 120 

Explication:

qu'est-ce que l'ini du bureau
  • La classe InvalidAgeError hérite de Exception. Il définit un __chaud__ méthode pour accepter l’âge et le message.
  • La méthode __str__ renvoie une représentation sous forme de chaîne lisible de l'erreur.
  • Dans set_age(), si l'âge est en dehors de la plage valide (0-120), l'exception est levée.
  • Le bloc try-sauf intercepte l'exception et imprime le message d'erreur.

Personnalisation des classes d'exceptions

Lorsque nous créons une exception personnalisée, nous sous-classons la classe Exception intégrée de Python (ou une sous-classe comme ValueError TypeError, etc.). Nous pouvons ensuite ajouter nos propres méthodes d'attributs ou une logique personnalisée pour rendre notre exception plus informative.



Nous pouvons également améliorer les exceptions personnalisées en ajoutant des attributs supplémentaires ou en remplaçant des méthodes.

Exemple: Ici, nous améliorons InvalidAgeError en ajoutant un code d'erreur et en personnalisant le message d'erreur.

Python
class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Sortir
[Error Code 1001] 150 -> Age must be between 0 and 120 

Explication:



  • InvalidAgeError a désormais un attribut supplémentaire error_code.
  • La méthode __str__ est remplacée pour afficher à la fois le code d’erreur et l’âge.
  • Lorsque set_age(150) est exécuté, l'exception est déclenchée et interceptée dans le bloc try-sauf.
  • Le message d'erreur personnalisé est imprimé, ce qui rend l'erreur plus descriptive.

Utilisation des exceptions standard comme classe de base

Parfois, au lieu d'hériter directement d'Exception, nous pouvons créer une exception personnalisée en sous-classant une exception standard telle que RuntimeError ValueError etc. Ceci est utile lorsque votre exception personnalisée doit être traitée comme un type spécifique d'erreur.

Exemple: Cet exemple montre comment créer une exception personnalisée NetworkError en héritant de RuntimeError qui est une exception intégrée standard.

Python
# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args) 

Sortir
('Connection failed') 

Explication:

  • NetworkError hérite de RuntimeError qui est un type d'exception intégré.
  • Lorsqu'il est déclenché, le message est stocké dans l'attribut args sous forme de tuple.
  • L'exception est interceptée et ses arguments stockés sont affichés.

Exemple concret : erreur d'e-mail non valide

Voici un exemple simple dans lequel nous déclenchons une exception personnalisée si l'adresse e-mail n'est pas valide :

pages du serveur Java
Python
class InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e) 

Sortir
userexample.com -> Invalid email format 

Explication:

  • Une nouvelle classe d'exception InvalidEmailError est définie pour valider les adresses e-mail.
  • Si l'e-mail donné ne contient pas de « @ », l'exception est levée.
  • Le bloc try-sauf détecte l'erreur et imprime le message formaté.

Quand utiliser les exceptions définies par l’utilisateur ?

Les exceptions définies par l'utilisateur doivent être prises en compte dans les scénarios suivants :

  • Représentant des erreurs spécifiques dans une application (par exemple InvalidAgeError DatabaseConnectionError).
  • Fournir des messages d'erreur plus clairs et plus descriptifs.
  • Gérer séparément un groupe d'erreurs liées à l'aide de except.

En utilisant des exceptions définies par l'utilisateur, les programmes deviennent plus lisibles, maintenables et plus faciles à déboguer.