Python - Gestion des Exceptions
Bonjour, futurs magiciens Python ! Je suis ravi d'être votre guide dans cette passionnante aventure dans le monde de la gestion des exceptions en Python. En tant que quelqu'un qui enseigne la programmation depuis des années, je peux vous dire que comprendre les exceptions, c'est comme apprendre à骑 une bicyclette avec des roulettes - cela peut sembler délicat au début, mais une fois que vous avez pris l'habitude, vous vous déplacerez en toute tranquillité en un rien de temps !
Qu'est-ce qu'une Exception ?
Avant de plonger dans les profondeurs, commençons par les bases. Imaginez que vous faites un gâteau (restez avec moi, je vous promets que cela se rapporte à Python !). Vous avez votre recette (votre code), vos ingrédients (vos données), et vous êtes prêt à y aller. Mais que se passe-t-il si vous manquez d'œufs à mi-chemin ? C'est une exception dans le monde de la pâtisserie !
En Python, une exception est une erreur qui se produit pendant l'exécution d'un programme. C'est comme un drapeau rouge qui apparaît en disant : "Hé là ! Quelque chose ne va pas du tout !"
Regardons un exemple simple :
print(10 / 0)
Si vous exécutez ce code, Python lèvera une ZeroDivisionError
. Il dit : "Hé, tu ne peux pas diviser par zéro ! Ça n'est pas autorisé dans ma cuisine... Je veux dire, environnement de programmation !"
Gestion des Exceptions en Python
Maintenant que nous savons ce que sont les exceptions, apprenons à les gérer avec grâce. En Python, nous utilisons les blocs try
et except
pour attraper et gérer les exceptions.
Voici la structure de base :
try:
# Code qui pourrait lever une exception
except TypeException:
# Code pour gérer l'exception
Modifions notre exemple précédent :
try:
resultat = 10 / 0
print(resultat)
except ZeroDivisionError:
print("Oups ! Vous ne pouvez pas diviser par zéro.")
Lorsque vous exécutez ce code, au lieu de planter, il affichera : "Oups ! Vous ne pouvez pas diviser par zéro."
La Clause except Sans Exception
Parfois, vous pourriez vouloir attraper toute exception qui se produit. Dans ce cas, vous pouvez utiliser une clause except
sans spécifier de type d'exception :
try:
# Quelque code risqué
x = int(input("Entrez un nombre : "))
y = 10 / x
print(y)
except:
print("Quelque chose s'est mal passé !")
Cela attrapera toute exception qui se produit dans le bloc try
. Cependant, il est généralement préférable de capturer des exceptions spécifiques lorsque cela est possible, car cela rend votre code plus précis et plus facile à déboguer.
La Clause except Avec Plusieurs Exceptions
Vous pouvez également gérer plusieurs exceptions dans une seule clause except
:
try:
x = int(input("Entrez un nombre : "))
y = 10 / x
print(y)
except (ValueError, ZeroDivisionError):
print("Entrée invalide ou division par zéro !")
Ce code capturera à la fois ValueError
(si l'utilisateur entre une valeur non numérique) et ZeroDivisionError
.
La Clause try-finally
La clause finally
est utilisée pour le code qui doit être exécuté indépendamment de la survenue ou non d'une exception. C'est comme l'équipe de nettoyage après une fête - elle se présente toujours, peu importe comment la fête s'est passée !
try:
f = open("example.txt", "r")
# Effectuer des opérations sur le fichier
except FileNotFoundError:
print("Le fichier n'existe pas !")
finally:
f.close() # Cela s'exécutera toujours, même si une exception se produit
Argument d'une Exception
Les exceptions peuvent porter des informations supplémentaires. Vous pouvez accéder à ces informations dans votre bloc except
:
try:
x = 10 / 0
except ZeroDivisionError as e:
print(f"Une erreur s'est produite : {e}")
Cela affichera : "Une erreur s'est produite : division par zéro"
Lever une Exception
Parfois, vous pourriez vouloir lever une exception vous-même. C'est comme être l'arbitre dans un jeu et signaler une faute :
def check_age(age):
if age < 0:
raise ValueError("L'âge ne peut pas être négatif !")
print(f"Votre âge est {age}")
try:
check_age(-5)
except ValueError as e:
print(e)
Cela affichera : "L'âge ne peut pas être négatif !"
Exceptions Définies par l'Utilisateur
Vous pouvez également créer vos propres types d'exceptions. C'est comme inventer une nouvelle règle dans un jeu :
class TooManyPizzasError(Exception):
pass
def order_pizza(number):
if number > 100:
raise TooManyPizzasError("Vous ne pouvez pas commander plus de 100 pizzas !")
print(f"Commande pour {number} pizzas passée avec succès.")
try:
order_pizza(101)
except TooManyPizzasError as e:
print(e)
Assertions en Python
Les assertions sont un moyen de s'assurer que certaines conditions sont remplies. Elles sont comme de petits points de contrôle dans votre code :
def divide(a, b):
assert b != 0, "Le diviseur ne peut pas être zéro !"
return a / b
try:
resultat = divide(10, 0)
except AssertionError as e:
print(e)
Cela affichera : "Le diviseur ne peut pas être zéro !"
Exceptions Standard
Python est fourni avec un ensemble d'exceptions intégrées. Voici quelques-unes des plus courantes :
Nom de l'Exception | Description |
---|---|
ZeroDivisionError | Levée lorsqu'une division ou un modulo par zéro se produit |
ValueError | Levée lorsqu'une fonction reçoit un argument de type correct mais de valeur incorrecte |
TypeError | Levée lorsqu'une opération ou une fonction est appliquée à un objet de type inapproprié |
NameError | Levée lorsqu'un nom local ou global n'est pas trouvé |
FileNotFoundError | Levée lorsqu'un fichier ou répertoire est demandé mais n'existe pas |
IndexError | Levée lorsqu'une sous-cription de séquence est hors limites |
KeyError | Levée lorsqu'une clé de dictionnaire n'est pas trouvée |
ImportError | Levée lorsqu'une instruction d'importation échoue |
Et voilà, mesdames et messieurs ! Vous venez de terminer votre cours accéléré sur la gestion des exceptions en Python. Souvenez-vous, les exceptions ne sont pas vos ennemis - elles sont plus comme des panneaux indicateurs utiles vous guidant vers un code plus robuste et meilleur. Continuez à pratiquer, à expérimenter, et bientôt, vous gérerez les exceptions comme un professionnel. Bon codage !
Credits: Image by storyset