Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 15 min Python

Gestion des erreurs en Python

Pourquoi Gestion des erreurs en Python ?

La gestion des erreurs est une compétence essentielle pour tout développeur Python. Elle permet de rendre votre code plus robuste et de fournir des informations précieuses sur ce qui ne va pas lorsqu'une erreur se produit. Dans un environnement réel, les erreurs sont inévitables. Que ce soit la lecture d'un fichier qui n'existe pas ou une requête HTTP qui retourne une erreur 404, il est crucial de savoir comment traiter ces situations.

Un cas concret serait l'essayer d'ouvrir un fichier qui n'existe pas. Sans gestion des erreurs, le programme plante et ne peut plus continuer son exécution. Avec une gestion appropriée des erreurs, on peut afficher un message d'erreur amical à l'utilisateur ou enregistrer cette erreur pour un traitement posterior.

Prerequis

  • Connaissances de base de Python (structures de données, boucles, fonctions)
  • Compréhension des types de bases (integers, strings, floats)
  • Compétences en programmation orientée objet
  • Un environnement de développement intégré (IDE) comme PyCharm, VSCode, ou Sublime Text
  • Python 3.x installé sur votre machine

Concepts fondamentaux

Exceptions et Erreurs Built-in

En Python, les erreurs sont représentées par des exceptions. Lorsque le programme rencontre une erreur qui ne peut pas être traitée, il lève une exception. Ces exceptions peuvent être de types intégrés comme ValueError, TypeError ou FileNotFoundError.

try:
    # Tentative d'ouvrir un fichier qui n'existe pas
    with open("inexistant.txt", "r") as file:
        content = file.read()
except FileNotFoundError as e:
    print(f"Erreur : {e}")

Blocs try-except

Le bloc try contient le code que vous pensez qu'il peut lever une erreur. Le bloc except s'exécute si une exception est levée dans le bloc try. Vous pouvez avoir plusieurs blocs except pour gérer différents types d'exceptions.

def diviser(x, y):
    try:
        result = x / y
        return result
    except ZeroDivisionError as e:
        print(f"Erreur : {e}")
        return None

print(diviser(10, 2))  # Affiche 5.0
print(diviser(10, 0))  # Affiche "Erreur : division by zero"

Blocs try-except-else

Le bloc else s'exécute si aucune exception n'est levée dans le bloc try.

def lire_fichier(nom_fichier):
    try:
        with open(nom_fichier, "r") as file:
            content = file.read()
    except FileNotFoundError as e:
        print(f"Erreur : {e}")
    else:
        print("Fichier lu avec succès")
        return content

print(lire_fichier("existant.txt"))  # Affiche "Fichier lu avec succès"
print(lire_fichier("inexistant.txt"))  # Affiche l'erreur

Blocs try-except-finally

Le bloc finally s'exécute peu importe ce qui arrive, même si une exception est levée. C'est utile pour nettoyer les ressources.

def lire_fichier(nom_fichier):
    file = None
    try:
        file = open(nom_fichier, "r")
        content = file.read()
        return content
    except FileNotFoundError as e:
        print(f"Erreur : {e}")
    finally:
        if file is not None:
            file.close()

print(lire_fichier("existant.txt"))  # Affiche le contenu du fichier et ferme le fichier

Mise en pratique : projet fil rouge

Nous allons créer un mini-projet de gestionnaire de tâches. Le but est d'avoir une application simple qui permet d'ajouter, afficher et supprimer des tâches.

Étape 1 : Création du fichier main.py


from tasks_manager import TasksManager

def main():
    manager = TasksManager()
    while True:
        print("\nGestionnaire de Tâches")
        print("1. Ajouter une tâche")
        print("2. Afficher les tâches")
        print("3. Supprimer une tâche")
        print("4. Quitter")
        choix = input("Choix : ")

        if choix == '1':
            task = input("Ajoutez une tâche : ")
            manager.add_task(task)
        elif choix == '2':
            tasks = manager.get_tasks()
            for i, task in enumerate(tasks):
                print(f"{i + 1}. {task}")
        elif choix == '3':
            index = int(input("Numéro de la tâche à supprimer : ")) - 1
            manager.remove_task(index)
        elif choix == '4':
            break
        else:
            print("Choix invalide")

if __name__ == "__main__":
    main()

Étape 2 : Création du fichier tasks_manager.py


class TasksManager:
    def __init__(self):
        self.tasks = []

    def add_task(self, task):
        self.tasks.append(task)

    def get_tasks(self):
        return self.tasks

    def remove_task(self, index):
        if 0 <= index < len(self.tasks):
            del self.tasks[index]
        else:
            print("Numéro de tâche invalide")

Étape 3 : Exécution du programme

python main.py

Erreurs frequentes et debugging

Erreur 1 : Indice de liste hors limites

tasks = ["Acheter du pain", "Faire la lessive"]
print(tasks[2])  # IndexError: list index out of range
## 
if 0 <= index < len(tasks):
    print(tasks[index])
else:
    print("Numéro de tâche invalide")

Erreur 2 : Division par zéro

result = 10 / 0  # ZeroDivisionError: division by zero
## 
try:
    result = 10 / y
except ZeroDivisionError as e:
    print(f"Erreur : {e}")

Erreur 3 : Fichier non trouvé

with open("inexistant.txt", "r") as file:  # FileNotFoundError: [Errno 2] No such file or directory: 'inexistant.txt'
    content = file.read()
## 
try:
    with open("inexistant.txt", "r") as file:
        content = file.read()
except FileNotFoundError as e:
    print(f"Erreur : {e}")

Pour aller plus loin

  1. Gestion des exceptions personnalisées : Créer vos propres exceptions pour mieux structurer votre code et communiquer les erreurs.
  2. Utilisation du module logging : Enregistrer les erreurs dans un fichier de journal au lieu d'afficher directement à l'utilisateur.
  3. Traitement asynchrone avec asyncio : Gérer les exceptions dans des fonctions asynchrones pour une meilleure performance.

Défi pratique

Créez une application CLI simple qui permet d'ajouter et de retirer des éléments d'une liste, en utilisant la gestion des erreurs pour traiter les cas où l'utilisateur tente d'opérer sur un élément inexistant.

Besoin d'aide sur Python ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est la différence entre une erreur et une exception en Python ?
En Python, une erreur est un événement qui interrompt le flux normal du programme, tandis qu'une exception est une erreur détectée pendant l'exécution du code qui peut être gérée.
Comment peut-on capturer et traiter des exceptions en Python ?
En Python, on utilise les blocs `try` et `except` pour capturer et traiter des exceptions. Le code susceptible de générer une exception est placé dans le bloc `try`, tandis que le code de gestion de l'exception est dans le bloc `except`.
Quelles sont les principales méthodes pour afficher des messages d'erreur personnalisés en Python ?
En Python, on peut utiliser la méthode `print()` pour afficher des messages d'erreur personnalisés. De plus, le bloc `except` permet de capturer l'exception et d'afficher un message spécifique à celle-ci.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.