Python - Leverer des Exceptions

Bonjour à tous, aspirants Pythonistes ! Aujourd'hui, nous allons plonger dans le monde fascinant des exceptions en Python. Ne vous inquiétez pas si vous êtes nouveau dans la programmation – je vais vous guider à travers ce concept étape par étape, tout comme j'ai fait pour d'innombrables étudiants au fil des années. Alors, prenez un verre de votre boisson préférée, et partons ensemble dans cette aventure Python !

Python - Raising Exceptions

Lever des Exceptions en Python

Imaginons que vous cuisinez un délicieux repas, mais vous réalisez soudain que vous êtes en manque d'un ingrédient crucial. Que faites-vous ? Vous arrêteriez probablement de cuisiner et avertiriez tout le monde de ce problème, n'est-ce pas ? Eh bien, c'est exactement ce que signifie lever des exceptions en Python – c'est un moyen de signaler qu'un événement inattendu ou problématique s'est produit dans votre code.

Pourquoi Lever des Exceptions ?

Lever des exceptions nous permet de :

  1. Indiquer des erreurs ou des situations inhabituelles
  2. Contrôler le flux de notre programme
  3. Fournir un retour d'information significatif aux utilisateurs ou à d'autres parties de notre code

Commençons par un exemple simple :

def diviser(a, b):
if b == 0:
raise ValueError("Impossible de diviser par zéro !")
return a / b

try:
resultat = diviser(10, 0)
except ValueError as e:
print(f"Oups ! Une erreur s'est produite : {e}")

Dans cet exemple, nous leverons une ValueError lorsque quelqu'un essaie de diviser par zéro. Analysons cela :

  1. Nous définissons une fonction diviser(a, b) qui vérifie si b est zéro.
  2. Si b est zéro, nous leverons une ValueError avec un message personnalisé.
  3. Nous utilisons un bloc try-except pour attraper l'exception et afficher un message amical.

Lorsque vous exécutez ce code, vous verrez :

Oups ! Une erreur s'est produite : Impossible de diviser par zéro !

Lever des Exceptions Intégrées

Python est fourni avec une variété d'exceptions intégrées que nous pouvons lever. Voici une table de某些 communes :

Exception Description
ValueError Levée lorsque une fonction reçoit un argument du bon type mais une valeur inappropriée
TypeError Levée lorsqu'une opération ou une fonction est appliquée à un objet d'un type inapproprié
IndexError Levée lorsque une sous-cription de séquence est hors limites
KeyError Levée lorsque'une clé de dictionnaire n'est pas trouvée
FileNotFoundError Levée lorsque un fichier ou répertoire est demandé mais n'existe pas

Voyons quelques exemples :

def verifier_age(age):
if not isinstance(age, int):
raise TypeError("L'âge doit être un entier")
if age < 0:
raise ValueError("L'âge ne peut pas être négatif")
print(f"Votre âge est {age}")

try:
verifier_age("vingt")
except TypeError as e:
print(f"Erreur de type : {e}")

try:
verifier_age(-5)
except ValueError as e:
print(f"Erreur de valeur : {e}")

Lorsque vous exécutez ce code, vous verrez :

Erreur de type : L'âge doit être un entier
Erreur de valeur : L'âge ne peut pas être négatif

Lever des Exceptions Personnalisées

Parfois, les exceptions intégrées ne suffisent pas. C'est alors que nous créons nos propres exceptions personnalisées ! C'est comme être un chef et créer vos propres recettes uniques.

Créer des Exceptions Personnalisées

Pour créer une exception personnalisée, nous définissons simplement une nouvelle classe qui hérite de la classe Exception :

class TropDePizzasError(Exception):
pass

def commander_pizza(nombre):
if nombre > 100:
raise TropDePizzasError("Whoa ! C'est trop de pizzas à gérer !")
print(f"Commande confirmée : {nombre} pizzas")

try:
commander_pizza(101)
except TropDePizzasError as e:
print(f"Commande échouée : {e}")

Dans cet exemple délicieux :

  1. Nous définissons une exception personnalisée TropDePizzasError.
  2. Notre fonction commander_pizza lève cette exception si quelqu'un commande plus de 100 pizzas.
  3. Nous attrapons l'exception et affichons un message amical.

Lorsque vous exécutez ce code, vous verrez :

Commande échouée : Whoa ! C'est trop de pizzas à gérer !

Rélever des Exceptions

Parfois, vous pourriez vouloir attraper une exception, faire quelque chose avec elle, puis la relancer pour qu'elle soit gérée par quelqu'un d'autre. C'est comme passer une patate chaude dans un jeu !

Voici comment vous pouvez le faire :

def operation_risquée():
print("Début de l'opération risquée...")
raise ValueError("Quelque chose s'est mal passé !")

def performer_operation():
try:
operation_risquée()
except ValueError:
print("Erreur capturée, enregistrement...")
raise  # Rélever l'exception

try:
performer_operation()
except ValueError as e:
print(f"Opération échouée : {e}")

Dans cet exemple :

  1. operation_risquée() lève toujours une ValueError.
  2. performer_operation() capture l'exception, l'enregistre, puis la relève.
  3. Nous capturons l'exception rélevée dans le bloc try-except externe.

Lorsque vous exécutez ce code, vous verrez :

Début de l'opération risquée...
Erreur capturée, enregistrement...
Opération échouée : Quelque chose s'est mal passé !

Et voilà, mes amis ! Nous avons couvert lever des exceptions, les exceptions intégrées, les exceptions personnalisées et même rélever des exceptions. Souvenez-vous, les exceptions ne sont pas vos ennemis – elles sont des outils précieux qui vous aident à écrire un code robuste et résistant aux erreurs.

Comme je le dis toujours à mes étudiants, programmer est comme apprendre à骑 à vélo. Vous pourriez tomber quelques fois, mais chaque chute (ou exception) vous enseigne quelque chose de nouveau. Continuez à pratiquer, restez curieux et n'ayez pas peur de lever quelques exceptions en cours de route !

Bon codage, et que vos exceptions soient toujours intentionnelles ! ?✨

Credits: Image by storyset