Gestion des Exceptions Python

Gestion des exceptions

En informatique et en programmation informatique, la gestion des exceptions est le processus de réponse à l'occurrence d'exceptions – des conditions anormales ou exceptionnelles nécessitant un traitement spécial.

Python possède de nombreuses exceptions intégrées qui sont levées lorsqu’un programme rencontre une erreur, et la plupart des bibliothèques externes, comme la populaire Requests, incluent ses propres exceptions personnalisées que nous devrons gérer.

Gestion des exceptions de base

Vous ne pouvez pas diviser par zéro, c’est une vérité mathématique, et si vous essayez de le faire en Python, l’interpréteur lèvera l’exception intégrée ZeroDivisionError :

def divide(dividend , divisor):
    print(dividend / divisor)

divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

Supposons que nous ne voulions pas que notre programme arrête son exécution ou n’affiche à l’utilisateur un résultat qu’il ne comprendra pas. Disons que nous voulons imprimer un message utile et clair, alors nous devons gérer l’exception avec les mots-clés try et except :

# try-except: gérer les exceptions avec élégance
def divide(dividend , divisor):
    try:  # Essayer d'exécuter ce code
        print(dividend / divisor)
    except ZeroDivisionError:  # Capturer le type d'exception spécifique
        print('Vous ne pouvez pas diviser par 0')

divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Vous ne pouvez pas diviser par 0
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Quels mots-clés sont utilisés pour gérer les exceptions en Python ?
A. try et except
B. catch et handle
C. error et rescue
D. if et else

Gestion de multiples exceptions à l’aide d’un seul bloc d’exception

Vous pouvez également gérer plusieurs exceptions sur une seule ligne comme suit sans avoir besoin de créer plusieurs blocs d’exception.

# Gérer plusieurs exceptions dans un seul bloc except
def divide(dividend , divisor):
    try:
        if (dividend == 10):
          var = 'str' + 1  # Ceci lèvera TypeError
        else:
          print(dividend / divisor)
    except (ZeroDivisionError, TypeError) as error:  # Capturer plusieurs types d'exceptions
        print(error)  # Afficher le message d'erreur

divide(dividend=20, divisor=5)
4
divide(dividend=10, divisor=5)
can only concatenate str (not "int") to str
divide(dividend=10, divisor=0)
division by zero
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Pouvez-vous gérer plusieurs types d'exceptions dans un seul bloc except ?
A. Non, vous devez utiliser des blocs except séparés pour chaque type d'exception
B. Oui, en les plaçant dans un tuple comme except (Exception1, Exception2)
C. Oui, mais seulement s'ils sont liés
D. Non, Python ne prend pas cela en charge

Code Finally dans la gestion des exceptions

Le code à l’intérieur de la section finally est toujours exécuté, qu’une exception ait été levée ou non :

# Bloc finally : s'exécute toujours, quelles que soient les exceptions
def divide(dividend , divisor):
    try:
        print(dividend / divisor)
    except ZeroDivisionError:
        print('Vous ne pouvez pas diviser par 0')
    finally:  # S'exécute toujours, même si une exception se produit
        print('Exécution terminée')

divide(dividend=10, divisor=5)
2.0
Exécution terminée
divide(dividend=10, divisor=0)
Vous ne pouvez pas diviser par 0
Exécution terminée
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Quand le bloc finally s'exécute-t-il ?
A. Seulement lorsqu'une exception se produit
B. Seulement lorsqu'aucune exception ne se produit
C. Toujours, qu'une exception se soit produite ou non
D. Jamais

Exceptions personnalisées

Les exceptions personnalisées s’initialisent en créant une class qui hérite de la classe de base Exception de Python, et sont levées à l’aide du mot-clé raise :

# Exception personnalisée : créée en héritant de la classe Exception
class MyCustomException(Exception):
    pass

raise MyCustomException  # Lever l'exception personnalisée
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyCustomException

Pour déclarer un message d’exception personnalisé, vous pouvez le passer comme paramètre :

class MyCustomException(Exception):
    pass

raise MyCustomException('Un message personnalisé pour mon exception personnalisée')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyCustomException: Un message personnalisé pour mon exception personnalisée

La gestion d’une exception personnalisée est la même que pour toute autre :

try:
    raise MyCustomException('Un message personnalisé pour mon exception personnalisée')
except MyCustomException:
    print('Mon exception personnalisée a été levée')
Mon exception personnalisée a été levée
Quiz

Connectez-vous pour répondre à ce quiz et suivre votre progression d'apprentissage

Comment créez-vous une exception personnalisée en Python ?
A. Créez une classe qui hérite de la classe Exception
B. Utilisez le décorateur @exception
C. Appelez Exception.create()
D. Importez-la à partir d'un module spécial

Liens pertinents