Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Exceptions personnalisées Python

Exceptions personnalisées Python

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 forcent votre programme à générer une erreur lorsque quelque chose ne va pas dans le programme.

Cependant, vous devrez parfois créer vos propres exceptions personnalisées qui servent votre objectif.

Créer des 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, du Exception intégré classer. 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 du Exception classer. Cette nouvelle exception, comme les autres exceptions, peut être déclenchée à l'aide du raise déclaration avec un message d'erreur facultatif.

Lorsque nous développons un programme Python volumineux, il est recommandé de placer toutes les exceptions définies par l'utilisateur que notre programme génère 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 concises. La plupart des implémentations déclarent une classe de base personnalisée et dérivent d'autres classes d'exception de cette classe de base. Ce concept est rendu plus clair dans l'exemple suivant.

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

Dans cet exemple, nous allons illustrer comment les exceptions définies par l'utilisateur peuvent être utilisées dans un programme pour générer et intercepter des erreurs.

Ce programme demandera à l'utilisateur d'entrer un nombre jusqu'à ce qu'il devine correctement un nombre stocké. Pour les aider à le comprendre, un indice est fourni 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 ValueTooSmallError
        elif 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.

Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

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

Les deux autres exceptions (ValueTooSmallError et ValueTooLargeError ) qui sont réellement soulevées par notre programme sont dérivées de cette classe. C'est la manière standard de définir des 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 en programmation orientée objet.

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

Prenons 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)

Sortie

Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Ici, nous avons remplacé le constructeur du Exception class pour accepter nos propres arguments personnalisés salary et message . Ensuite, le constructeur du parent Exception la classe est appelée manuellement avec le self.message argument utilisant super() .

Le self.salary personnalisé l'attribut est défini pour être utilisé ultérieurement.

Le __str__ hérité méthode du Exception class est alors utilisé pour afficher le message correspondant lorsque SalaryNotInRangeError est relevé.

Nous pouvons également personnaliser le __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)

Sortie

Enter salary amount: 2000
Traceback (most recent call last):
  File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range

Pour en savoir plus sur la façon dont vous pouvez gérer les exceptions dans Python, consultez Python Exception Handling.


Python

  1. Types de données Python
  2. Opérateurs Python
  3. Instruction de passe Python
  4. Arguments de la fonction Python
  5. Dictionnaire Python
  6. Erreurs Python et exceptions intégrées
  7. Programmation orientée objet Python
  8. Héritage Python
  9. Itérateurs Python