Lever des Exceptions Personnalisées
Parfois, vous devez signaler une condition d'erreur qui n'est pas une exception Python intégrée. Vous pouvez le faire avec l'instruction raise, qui vous permet de créer et de déclencher vos propres exceptions. Ceci est utile pour rendre la gestion des erreurs de votre application plus spécifique et descriptive.
Voyons d'abord comment raise une exception intégrée. Dans le WebIDE, ouvrez le fichier ~/project/raise_exception.py et ajoutez le code suivant :
def check_positive(number):
if number <= 0:
raise ValueError("Input must be a positive number")
print(f"The number {number} is positive.")
try:
check_positive(-5)
except ValueError as e:
print(f"Caught an exception: {e}")
try:
check_positive(10)
except ValueError as e:
print(f"Caught an exception: {e}")
Enregistrez le fichier et exécutez-le depuis le terminal :
python ~/project/raise_exception.py
La sortie sera :
Caught an exception: Input must be a positive number
The number 10 is positive.
Ici, la fonction check_positive lève une ValueError si l'entrée n'est pas positive, laquelle est ensuite capturée par le bloc except.
Maintenant, définissons et levons une exception personnalisée. Les exceptions personnalisées sont des classes qui héritent de la classe intégrée Exception.
Dans le WebIDE, ouvrez le fichier ~/project/custom_exception.py et ajoutez le code suivant :
class NegativeNumberError(Exception):
"""Custom exception raised for negative numbers."""
pass
def process_positive_number(number):
if number < 0:
raise NegativeNumberError("Negative numbers are not allowed")
print(f"Processing positive number: {number}")
try:
process_positive_number(-10)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
try:
process_positive_number(20)
except NegativeNumberError as e:
print(f"Caught custom exception: {e}")
Enregistrez le fichier et exécutez-le depuis le terminal :
python ~/project/custom_exception.py
La sortie sera :
Caught custom exception: Negative numbers are not allowed
Processing positive number: 20
Dans cet exemple, nous avons défini notre propre NegativeNumberError et l'avons levée sous une condition spécifique. Le bloc try...except capture ensuite spécifiquement ce type d'erreur personnalisé, rendant la gestion des erreurs plus précise.