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 !
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 |
# 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 ?
