Module 4Déployer la solution Python
Chapitre 9 sur 11
Déboguer le code Python
Erreurs de syntaxe et exceptions, try/except/finally, raise et débogueur pdb.
- ≈ 120 min
- 4 leçons
- 2 vidéos
- 3 exercices
Module 4Déployer la solution Python
Chapitre 9 sur 11
Erreurs de syntaxe et exceptions, try/except/finally, raise et débogueur pdb.
Objectifs
Avec ce chapitre, tu sauras…
try, except, else et finally ;raise ;Tous les programmeurs font des erreurs. La différence entre un débutant et un professionnel n'est pas le nombre d'erreurs, c'est la vitesse à laquelle il les trouve. Ce chapitre te donne la méthode et les outils.
Leçon 1
Tableau: Erreur de syntaxe ou exception ?
| Erreur de syntaxe | Exception | |
|---|---|---|
| quand ? | avant l'exécution, à l'analyse du code | pendant l'exécution |
| cause | le code n'est pas du Python valide | une instruction valide échoue (division par 0, conversion impossible…) |
| exemple | if x > 0 print(x) (il manque :) | 10 / 0, int("deux") |
| message | SyntaxError avec une flèche ^ | ZeroDivisionError, ValueError… |
| fatale ? | toujours : rien ne s'exécute | pas forcément : on peut la gérer |
| Exception | Cause | Exemple |
|---|---|---|
ZeroDivisionError | division par zéro | 5 / 0 |
ValueError | valeur incorrecte | int("abc") |
TypeError | opération sur un mauvais type | "5" + 3 |
NameError | variable inconnue | print(totla) |
IndexError | indice hors limites |
Leçon 2
| Saisie | Affichage |
|---|---|
1994 | Tu as 22 ans. · Fin du programme. |
deux | Erreur, veuillez entrer un nombre. · Fin du programme. |
Leçon 3
| Commande | Rôle |
|---|---|
c (continue) | continuer jusqu'au prochain point d'arrêt, une exception ou la fin |
n (next) | exécuter la ligne suivante (sans entrer dans les fonctions) |
s (step) | exécuter en entrant dans la fonction appelée |
p i | afficher la valeur de i |
Leçon 4
| Outil | Usage |
|---|---|
| débogueur de VS Code | clique dans la marge pour un point d'arrêt (rond rouge), puis F5 ; panneau des variables, exécution pas à pas (F10, F11) |
| Python Tutor (pythontutor.com) | visualise l'exécution ligne par ligne, avec les variables et la mémoire : idéal pour comprendre une boucle ou une liste |
print() stratégiques | afficher les variables clés : simple, mais à retirer ensuite |
1Une erreur de syntaxe est détectée…
2int("abc") provoque…
3Le bloc finally s'exécute…
4Le bloc else d'un try s'exécute…
5Pour générer volontairement une erreur :
6Dans pdb, la commande pour continuer l'exécution est…
L'essentiel du chapitre
SyntaxError). Exception : pendant l'exécution (ZeroDivisionError, ValueError, TypeError, IndexError, KeyError, FileNotFoundError).try / except Type as e (du plus spécifique au plus général) / else (sans erreur) / finally (toujours) ; raise pour lever.breakpoint() ou pdb.set_trace(), commandes c, n, s, p, l, q.[1, 2][5]KeyError | clé absente d'un dictionnaire | d["inconnu"] |
FileNotFoundError | fichier introuvable | open("absent.txt") |
IndentationError | indentation incorrecte | ligne mal décalée |
| Exécuté… |
|---|
try | toujours (jusqu'à la première erreur) |
except | seulement en cas d'erreur correspondante |
else | seulement s'il n'y a pas eu d'erreur |
finally | dans tous les cas : fermer un fichier, une connexion |
Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
Vidéo · À regarder
FRCours Python Complet pour Débutants - 10h de Formation de A à Z
Sébastien Daviot - Expertise Data · YouTube
i = 3 | modifier une variable en cours d'exécution |
l (list) | afficher le code autour de la ligne courante |
b 12 | placer un point d'arrêt à la ligne 12 |
q (quit) | quitter le débogueur |
File "prog.py", line 1
while True print("Bonjour")
^^^^^
SyntaxError: invalid syntaxTraceback (most recent call last):
File "prog.py", line 3, in <module>
print(10 / n)
ZeroDivisionError: division by zeroFile "…", line N : le fichier et la ligne fautive ;^ (un : ou une parenthèse oubliés).Tableau: Les exceptions les plus courantes
annee = input("Année de naissance ? ")
try:
age = 2016 - int(annee)
print("Tu as", age, "ans.")
except:
print("Erreur, veuillez entrer un nombre.")
print("Fin du programme.")On place le code risqué dans le bloc try. S'il s'exécute sans erreur, le bloc except est ignoré. Si une erreur survient, l'exécution du try s'arrête immédiatement et passe au bloc except ; le programme continue ensuite normalement après l'instruction.
Récupérer l'exception et capturer des erreurs spécifiques
try:
a = int(input("a ? "))
b = int(input("b ? "))
print("Résultat :", a / b)
except ValueError:
print("Erreur : il faut entrer des nombres entiers.")
except ZeroDivisionError:
print("Erreur : division par zéro.")
except Exception as e:
print("Autre erreur :", type(e), e)try:
a = int(input("a ? "))
print(10 / a)
except (ValueError, ZeroDivisionError):
print("Valeur invalide.")Les blocs except sont testés dans l'ordre. Si except Exception: est placé en premier, il capture toutes les erreurs et les blocs suivants ne servent jamais. Classe-les du plus spécifique au plus général. Et évite le except: nu en production : il cache aussi les fautes de frappe (NameError), ce qui rend le débogage très difficile.
else et finally
print("Début du calcul.")
try:
a = int(input("a ? "))
b = int(input("b ? "))
resultat = a / b
except Exception:
print("Erreur.")
else:
print("Résultat :", resultat) # seulement s'il n'y a pas eu d'erreur
finally:
print("Nettoyage de la mémoire.") # TOUJOURS exécuté
print("Fin du calcul.")Un débogueur est un outil qui s'attache à un programme en cours d'exécution pour l'inspecter : exécuter le code pas à pas, afficher la valeur des variables à tout moment, et placer des points d'arrêt (breakpoints) sur des lignes ou des conditions.
pdb, le débogueur intégré à Python
def log(i):
print("Itération", i)
def looper(number):
for i in range(number):
import pdb; pdb.set_trace() # point d'arrêt (ou simplement : breakpoint())
log(i)
looper(5)Quand l'exécution atteint set_trace(), le programme s'arrête et affiche l'invite (Pdb) : tu peux taper des commandes.
Tableau: Les commandes de pdb
print : la variable a-t-elle la valeur attendue ?Écris un programme qui demande un nom de fichier, affiche son contenu, et affiche un message clair si le fichier n'existe pas (FileNotFoundError). Le message « Fin de la lecture » s'affiche dans tous les cas.
Ce programme contient deux erreurs de syntaxe et une exception possible. Trouve-les et corrige-les.
notes = [12, 15, 9]
for n in notes
print(n)
moyenne = sum(notes) / len(note)
if moyenne >= 10
print("Admis")Écris une fonction lire_entier(message, mini, maxi) qui redemande la saisie tant que l'utilisateur n'entre pas un entier compris entre mini et maxi, en gérant l'exception ValueError.
Générer une erreur : raise
def fact(n):
"""Renvoie la factorielle de n (n entier positif ou nul)."""
if n < 0:
raise ArithmeticError("n doit être positif ou nul")
resultat = 1
for i in range(2, n + 1):
resultat *= i
return resultat
try:
print(fact(-3))
except ArithmeticError as e:
print("Erreur :", e)Les exceptions en Python : try, except, finally et raise, en français.
La partie « Gestion des erreurs » du cours de Sébastien Daviot.
import pdb puis pdb.run("looper(5)") : le débogueur s'arrête avant la première instruction ;python -m pdb prog.py ;breakpoint() remplace import pdb; pdb.set_trace().