Debug et Gestion des Erreurs

Les erreurs font partie de la programmation ! Un bon developpeur n'est pas celui qui ne fait jamais d'erreur, mais celui qui sait les comprendre et les corriger rapidement. Deviens un pro du debug !

Difficulte:
35 min
+40 XP

Objectifs du cours

  • Comprendre les differents types d'erreurs en Python
  • Lire et interpreter un message d'erreur (traceback)
  • Utiliser try/except pour gerer les erreurs
  • Appliquer des techniques de debug efficaces
  • Eviter les erreurs les plus frequentes des debutants

Erreurs courantes a eviter

  • Ignorer les messages d'erreur sans les lire
  • Utiliser un except trop generique (except: sans type)
  • Oublier de tester les cas limites (valeurs nulles, listes vides)
  • Ne pas utiliser print() pour verifier les valeurs intermediaires

**Les 3 categories d'erreurs**

1. **Erreurs de syntaxe (SyntaxError)** - Le code ne respecte pas la grammaire Python - Python refuse meme d'executer le programme - Exemple : parenthese oubliee, indentation incorrecte

2. **Erreurs d'execution (Exceptions)** - Le code est syntaxiquement correct - L'erreur survient pendant l'execution - Exemple : division par zero, fichier inexistant

3. **Erreurs de logique (Bugs)** - Le code s'execute sans erreur - Mais le resultat n'est pas celui attendu - Les plus difficiles a trouver !

**Erreurs courantes :**

| Erreur | Cause | |--------|-------| | SyntaxError | Faute de frappe, parenthese oubliee | | IndentationError | Mauvaise indentation | | NameError | Variable non definie | | TypeError | Operation sur type incompatible | | IndexError | Index hors limites d'une liste | | KeyError | Cle inexistante dans un dict | | ZeroDivisionError | Division par zero |

Python
# Exemples d'erreurs courantes

print("=== ERREURS DE SYNTAXE ===")
# Ces lignes sont commentees car elles causeraient des erreurs
# print("Bonjour"   # SyntaxError: parenthese fermante manquante
# if True           # SyntaxError: deux-points manquants
#     print("ok")   # IndentationError: indentation attendue

print("=== ERREURS D'EXECUTION ===")

# NameError - variable non definie
try:
    print(variable_inexistante)
except NameError as e:
    print(f"NameError: {e}")

# TypeError - types incompatibles
try:
    resultat = "age: " + 15
except TypeError as e:
    print(f"TypeError: {e}")

# IndexError - index hors limites
try:
    liste = [1, 2, 3]
    print(liste[10])
except IndexError as e:
    print(f"IndexError: {e}")

# ZeroDivisionError
try:
    resultat = 10 / 0
except ZeroDivisionError as e:
    print(f"ZeroDivisionError: {e}")

# KeyError - cle inexistante
try:
    dico = {"nom": "Alice"}
    print(dico["age"])
except KeyError as e:
    print(f"KeyError: {e}")

Quiz de validation

1. Quelle erreur survient quand on divise par zero ?

2. Dans un traceback, ou se trouve le type d'erreur ?

3. Que fait le bloc 'finally' dans try/except ?

4. Comment recuperer le message d'une erreur ValueError ?

5. Quelle est la meilleure pratique pour le debug ?

Pixel