Aller au contenu
Pédagogie

Les 10 erreurs Python que je corrige le plus souvent

Ilian, Head of ScienceIngénieur logiciel et professeur particulier

La plupart des blocages des premières semaines en Python ne viennent pas de la difficulté du langage mais d'une dizaine de malentendus qui reviennent chez presque tous les débutants. Les plus coûteux ne déclenchent aucun message d'erreur : le programme tourne, il donne un résultat faux, et rien ne signale le problème.

1. Faire un calcul sans le garder

L'erreur numéro un, et de loin. En maths, écrire « a + 6 » a un sens en soi. En Python, une ligne qui calcule sans ranger le résultat quelque part ne sert à rien : la valeur est calculée, puis jetée.

Ajouter 6 à une variable
À éviter
a = 10
a + 6        # Python calcule 16, puis l'oublie
print(a)     # 10
Correct
a = 10
a = a + 6    # le résultat est rangé dans a
print(a)     # 16

Aucun message d'erreur n'apparaît, et c'est ce qui rend la faute difficile à voir. Le réflexe à installer : à gauche du signe égal, l'endroit où l'on range ; à droite, le calcul.

2. Écrire =+ au lieu de +=

Ajouter 5 à un score
À éviter
score = 10
score =+ 5    # Python lit : score = (+5)
print(score)  # 5
Correct
score = 10
score += 5    # raccourci de : score = score + 5
print(score)  # 15

3 à 6. Quatre fautes que Python signale tout de suite

Celles-là ont au moins l'avantage d'arrêter le programme. Le message dit exactement quoi corriger, à condition de le lire.

Ce qu'on écritCe que fait PythonCe qu'il faut écrire
if age = 18:SyntaxError. Un seul égal sert à ranger une valeur, jamais à comparer.if age == 18:
if age > 18SyntaxError. Les deux-points manquent en fin de ligne.if age > 18: puis la ligne suivante décalée de quatre espaces.
for i in range(1, 10):Aucune erreur, mais la boucle s'arrête à 9 : la borne de droite est exclue.range(1, 11) pour aller jusqu'à 10.
"Tu as " + 15 + " ans"TypeError. Python refuse de coller du texte et un nombre."Tu as " + str(15) + " ans", ou plus simple : f"Tu as {15} ans".

7. Oublier que input renvoie toujours du texte

Même quand l'utilisateur tape des chiffres, Python range du texte. Pour lui, « 12 » et 12 ne sont pas la même chose.

Demander un âge, puis calculer
À éviter
age = input("Ton âge : ")
print(age + 1)   # TypeError : on n'ajoute pas 1 à du texte
Correct
age = int(input("Ton âge : "))
print(age + 1)   # 16 si l'utilisateur a tapé 15

Convertissez au moment de la saisie, pas dix lignes plus loin. Avec des nombres à virgule, c'est float au lieu de int.

8. Confondre print et return

print affiche à l'écran. return renvoie une valeur au reste du programme. Une fonction qui se contente d'afficher ne renvoie rien : elle renvoie None.

Une fonction qui double un nombre
À éviter
def double(n):
    print(n * 2)

resultat = double(5)   # affiche bien 10
print(resultat)        # None
Correct
def double(n):
    return n * 2

resultat = double(5)
print(resultat)        # 10

La règle simple : si le résultat doit servir ailleurs, c'est return. print sert à montrer quelque chose à un humain, à la toute fin.

9. Passer par les indices quand ce n'est pas nécessaire

Le programme fonctionne, donc personne ne corrige. C'est pourtant le marqueur le plus visible d'un code de débutant, et la source de la moitié des erreurs d'indice.

Afficher toutes les notes d'une liste
À éviter
for i in range(len(notes)):
    print(notes[i])
Correct
for note in notes:
    print(note)

# Et si le numéro de la case sert vraiment :
for i, note in enumerate(notes):
    print(i, note)

En Python, une boucle for parcourt directement les éléments. On ne passe par range que si l'indice sert à quelque chose, ce qui est rare.

10. Comparer des nombres à virgule avec ==

Un ordinateur ne stocke pas 0,1 exactement, mais la valeur binaire la plus proche. Les écarts minuscules s'accumulent, et une égalité qui devrait être vraie devient fausse.

Le classique qui surprend tout le monde
À éviter
print(0.1 + 0.2 == 0.3)   # False
print(0.1 + 0.2)          # 0.30000000000000004
Correct
from math import isclose

print(isclose(0.1 + 0.2, 0.3))   # True

isclose vérifie que deux nombres sont assez proches pour être tenus pour égaux. C'est la bonne façon de comparer des flottants, et cela évite d'écrire soi-même une tolérance à la main.

Le réflexe qui vaut les dix autres : lire le message d'erreur

Beaucoup d'élèves voient du rouge, paniquent, et changent une ligne au hasard. Python indique pourtant la ligne exacte, le type d'erreur et souvent la valeur en cause. Ces cinq messages couvrent la quasi-totalité des cas des premières semaines.

Le messageCe qu'il veut direOù regarder
SyntaxErrorLa phrase n'est pas du Python valide.La ligne indiquée, et surtout celle juste au-dessus.
NameErrorCe nom n'existe pas encore.Une faute de frappe, ou une variable utilisée avant d'être créée.
TypeErrorDeux types incompatibles sont mélangés.Un texte et un nombre, le plus souvent un input non converti.
IndexErrorCette case n'existe pas dans la liste.La longueur réelle de la liste, pas celle qu'on imagine.
IndentationErrorLes décalages ne sont pas cohérents.Un mélange de tabulations et d'espaces dans le fichier.

Et après ces dix erreurs ?

L'erreur suivante

La copie de liste

Écrire b = a sur une liste ne crée pas une copie : les deux noms désignent le même objet, et modifier l'un modifie l'autre. C'est la première vraie marche après ces dix erreurs.

Programme de terminale

Les structures de données

Piles, files, arbres et graphes reposent entièrement sur la compréhension des références. Sans elle, tout le chapitre reste opaque.

Sources et ressources

Questions fréquentes

On me demande souvent

Ces erreurs concernent-elles aussi les élèves de NSI ?
Oui. Elles sont vues en première, mais elles resurgissent en terminale sous une forme plus coûteuse, notamment la confusion entre print et return dès que les fonctions commencent à s'appeler entre elles.
Pourquoi certaines de ces erreurs ne déclenchent-elles aucun message ?
Parce que le code reste valide du point de vue de Python. « a + 6 » et « score =+ 5 » sont des phrases correctes, elles ne font simplement pas ce que l'auteur croyait. Ce sont les plus longues à trouver, d'où leur place en tête de liste.
Comment progresser quand on comprend en cours mais qu'on bloque seul ?
C'est presque toujours un problème de découpage plutôt que de connaissance. L'exercice utile est de réécrire seul, sans le modèle, un programme déjà corrigé en cours. Le point de blocage apparaît immédiatement.
Faut-il apprendre Python avec une intelligence artificielle ?
Pour expliquer un message d'erreur, c'est très utile. Pour produire le code à votre place, c'est contre-productif au lycée : la compétence évaluée est justement celle que vous déléguez, et cela se voit à la première question de soutenance.

Cette page fait partie du dossier cours particuliers de python.

Débloquer Python pour de bon

Ces réflexes s'installent en deux ou trois séances, et ils servent ensuite toute l'année, en NSI comme en projet personnel.

Tout démarre par une heure d'évaluation sans engagement : on situe le niveau, on construit le programme, et le tarif en découle.