Aller au contenu
M02 · D. Déployer la solution Python

Déboguer un programme Python et gérer les erreurs

Lire un message d'erreur, distinguer les erreurs de syntaxe, d'exécution et de logique, et protéger un programme avec try / except.

1Situer

Un collègue vous envoie un programme de calcul de moyenne qui « ne marche pas ». Il plante quand on saisit une lettre, et donne parfois une moyenne fausse. Avant de tout réécrire, il faut comprendre ce que dit Python et trouver les erreurs une par une.

2Comprendre

Lire un message d'erreur de bas en haut
1 def moyenne(notes): 2 total = 0 3 for n in notes: 4 total = total + n 5 return total / len(notes) Traceback (most recent call last): File "<exec>", line 4, in moyenne TypeError: unsupported operand type(s) for +: 'int' and 'str' notes.append(float(texte))

Le programme s'arrête et Python affiche un message d'erreur (traceback). Pas de panique : il dit où et pourquoi.

1 / 5

Déboguer, c’est trouver et corriger les erreurs d’un programme. Il en existe trois familles.

FamilleQuandExempleMessage
Syntaxeavant l’exécutiondeux-points oublié après ifSyntaxError
Exécutionpendant l’exécutiondiviser par zéro, "5" + 1ZeroDivisionError, TypeError
Logiquejamais signalée< au lieu de <=aucun : le résultat est faux

Lire un message d’erreur

Lisez le message de bas en haut : la dernière ligne donne le type d’erreur et sa cause, la ligne line N indique où le problème a été détecté.

Traceback (most recent call last):
  File "<exec>", line 4, in moyenne
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ici, à la ligne 4, on additionne un entier et un texte : une note n’a pas été convertie.

Méthode de débogage

  1. Reproduire l’erreur avec des valeurs connues.
  2. Localiser : lire le message, ajouter des print() pour voir les valeurs intermédiaires.
  3. Corriger une seule chose à la fois, puis réexécuter.
  4. Tester les cas limites : liste vide, zéro, saisie invalide.

Gérer les erreurs prévisibles

Certaines erreurs viennent de l’utilisateur. On les traite avec try / except au lieu de laisser le programme planter :

try:
    note = float(input("Note : "))
except ValueError:
    print("Veuillez saisir un nombre.")
Exemple simple

Le voyant du tableau de bord

Quand un voyant s'allume dans la voiture, il indique où regarder. Un message d'erreur Python fait la même chose : il donne le type d'erreur et le numéro de ligne. On le lit en partant du bas.

Exemple simple

Additionner du texte et un nombre

input renvoie du texte. « 5 » + 3 n'a pas de sens pour Python, d'où une TypeError. La correction : convertir avec int.

age = input("Âge : ")
print(age + 1)        # TypeError
print(int(age) + 1)   # correct

3Manipuler

Ce programme contient 2 erreurs. Exécutez-le avec les entrées 12, 15, 9 et lisez le message. Corrigez, réexécutez, jusqu'à obtenir la moyenne 12.0. Essayez ensuite avec l'entrée abc.
Pas à pas dans le lab ↗Python se charge au premier clic (environ 12 Mo, une seule fois).
Console

4Pratiquer

Exercice 1 · Les deux corrections

Donnez les deux corrections à apporter au programme de la simulation et le type de chaque erreur.

Voir un indice

La première erreur arrête le programme. La seconde ne fait rien planter mais donne un résultat faux.

Voir le corrigé
# Erreur d'exécution (TypeError) : input() renvoie du texte
notes.append(float(texte))

# Erreur de logique : le « - 1 » fausse le résultat
return total / len(notes)

Exercice 2 · Protéger la saisie

Modifiez la saisie pour que le programme redemande la note tant que l'utilisateur tape autre chose qu'un nombre.

Voir le corrigé
def lire_note():
    while True:
        texte = input("Note : ")
        try:
            return float(texte)
        except ValueError:
            print("Ce n'est pas un nombre, recommencez.")

5Vérifier

1. Un programme s'exécute sans message d'erreur mais affiche un résultat faux. C'est...
2. Dans un message d'erreur Python, où se trouve l'information la plus utile ?
3. Que fait le bloc except ValueError ?