Les 5 erreurs Python les plus courantes et comment les corriger

- IndentationError : bloc mal indenté ou mélange de tabulations et d’espaces.
- SyntaxError : code qui ne respecte pas la grammaire Python.
- IndexError : accès hors bornes d’une séquence.
- ValueError : type correct mais valeur inappropriée pour l’opération.
- AttributeError : l’objet n’a pas l’attribut ou la méthode demandée.
Pourquoi ce guide est utile
Même si Python est réputé simple, ces erreurs stoppent souvent les débutants et prennent du temps à diagnostiquer pour les plus expérimentés. Ce guide fournit des heuristiques, des checklists par rôle, des extraits réutilisables et une mini-méthodologie de débogage pour aller plus vite.
IndentationError
Qu’est-ce que c’est
Une IndentationError survient quand les blocs de code ne respectent pas une indentation cohérente. En Python, l’indentation définit les blocs (boucles, fonctions, conditions). L’interpréteur exige une indentation uniforme.
Exemple incorrect
for i in range(5):
print(i)
Pourquoi ça arrive
- Copie/Collage depuis des éditeurs qui formattent différemment.
- Mélange de tabulations et d’espaces (visible uniquement avec des caractères invisibles).
- Modification manuelle d’un bloc sans ajuster toute la hiérarchie.
Correction simple
for i in range(5):
print(i)
Détection et outils
- Activez les caractères invisibles dans votre éditeur (affiche tabulations et espaces).
- Configurez l’éditeur sur « espaces seulement » (4 espaces par niveau pour Python PEP 8).
- Utilisez un linter (flake8, pylint) qui signale les incohérences d’indentation.
Bonnes pratiques
- Normalisez l’indentation au début du projet.
- Ajoutez une configuration d’éditeur (.editorconfig) partagée.
- Exécutez un formatteur automatique (black) avant les commits.
Contre-exemples et limites
- Certains langages autorisent la flexibilité d’indentation ; Python non. Le formatteur peut modifier l’apparence du code mais pas la logique.
SyntaxError
Qu’est-ce que c’est
Une SyntaxError signifie que le code ne respecte pas la grammaire Python. L’interpréteur n’arrive pas à parser le code.
Causes courantes
- Oubli de ponctuation (par exemple le deux-points : après une condition ou une définition de fonction).
- Parenthèses ou guillemets non fermés.
- Mot-clé mal orthographié (ex. esle au lieu de else).
- Usage invalide d’un mot réservé comme nom de variable.
Exemple
if x > 0
print("positif")
L’interpréteur signale généralement la ligne et la position approximative.
Diagnostic rapide
- Lire le message d’erreur et regarder la ligne indiquée.
- Vérifier la ligne précédente : souvent une parenthèse non fermée sur la ligne précédente provoque l’erreur suivante.
- Utilisez un IDE qui propose l’autocomplétion et la vérification de syntaxe en temps réel.
Solutions
- Corriger la ponctuation manquante.
- Renommer la variable si elle masque un mot réservé.
- Reformuler l’expression si elle est trop complexe.
Exemples fréquents et corrections
- Oubli du deux-points:
- Erreur :
def f(x)
- Correction :
def f(x):
- Erreur :
- Chaîne non fermée:
- Erreur :
print("Hello)
- Correction :
print("Hello")
- Erreur :
Prévention
- Activez la coloration syntaxique et la vérification en temps réel.
- Testez fréquemment les petites portions de code.
- Utilisez des revues de code automatisées pour attraper les fautes de syntaxe avant le CI.
IndexError
Qu’est-ce que c’est
IndexError se produit quand on tente d’accéder à un index en dehors des limites d’une séquence (liste, tuple, chaîne de caractères).
Exemple
numbers = [1, 2, 3]
print(numbers[3]) # IndexError: list index out of range
Pourquoi ça arrive
- Oubli que l’indexation commence à 0.
- Off-by-one lors des boucles.
- Modification d’une séquence pendant l’itération.
- Supposition d’une taille minimale non vérifiée.
Bonnes pratiques de prévention
- Utilisez
len(sequence)
pour vérifier les bornes avant l’accès. - Parcourez avec des boucles
for element in sequence
plutôt que par indices quand c’est possible. - Pour obtenir le dernier élément, préférez
sequence[-1]
si la séquence n’est pas vide.
Exemple sûr
if 0 <= index < len(numbers):
print(numbers[index])
Cas avancés
- Pour les itérateurs ou générateurs, utilisez
enumerate()
plutôt que d’incrémenter un compteur manuellement. - Quand vous retirez des éléments d’une liste pendant l’itération, itérez sur une copie
for x in list(my_list):
ou construisez une nouvelle liste par compréhension.
ValueError
Qu’est-ce que c’est
ValueError survient quand une fonction reçoit un argument du bon type mais avec une valeur inacceptable pour l’opération.
Exemples typiques
int('10') # OK
int('ten') # ValueError
import math
math.sqrt(-5) # ValueError si l'on exige un flottant réel
Pourquoi ça arrive
- Conversion de chaînes non numériques en types numériques.
- Valeurs hors domaine (ex. racine carrée d’un nombre négatif dans math.sqrt pour nombres réels).
- Suppositions incorrectes sur l’entrée utilisateur.
Gestion recommandée
- Valider et nettoyer les entrées utilisateurs.
- Utiliser try/except pour capturer ValueError et fournir un message d’erreur clair.
try:
num = input("Entrez un nombre : ")
num_int = int(num)
except ValueError as e:
print(f"Entrée non valide : {e}")
Alternatives pour la validation
- Utiliser des fonctions de validation explicites (ex. regex pour chaînes numériques).
- Lorsque possible, proposer des valeurs par défaut sécurisées ou un mécanisme de reprise.
AttributeError
Qu’est-ce que c’est
AttributeError signifie que l’on tente d’accéder à un attribut ou à une méthode qui n’existe pas pour cet objet.
Exemples
text = "hello world"
print(text.push()) # AttributeError: 'str' object has no attribute 'push'
user = None
print(user.name) # AttributeError: 'NoneType' object has no attribute 'name'
Diagnostic
- Vérifiez le type de l’objet avec
type(obj)
ouisinstance(obj, Class)
. - Utilisez
dir(obj)
pour lister les attributs/méthodes disponibles. - Assurez-vous que l’objet a bien été initialisé avant l’accès.
Solutions
- Changez l’appel pour utiliser une méthode valide (ex.
append
pour les listes, paspush
). - Vérifiez les retours de fonction : une fonction peut renvoyer
None
en cas d’erreur. - Dans les cas légitimes d’absence d’attribut, utilisez
getattr(obj, 'attr', default)
pour une valeur par défaut.
Méthodologie de débogage rapide (mini-méthode)
- Lire l’exception et la pile d’appels (traceback).
- Localiser la première ligne du code utilisateur dans la pile.
- Examiner le contexte : types attendus, valeurs possibles, état des variables.
- Ajouter des prints temporaires ou utilisez le débogueur (pdb, debug intégré IDE).
- Reproduire le cas minimal qui déclenche l’erreur.
- Corriger et ajouter un test unitaire couvrant le cas.
Heuristiques et modèles mentaux
- Erreur d’Indentation : pense au « bloc » plutôt qu’à la ligne. Vérifie la hiérarchie.
- Erreur de Syntaxe : relis la phrase entière (ligne) comme une phrase naturelle.
- Erreur d’Index : toujours compter depuis zéro ; vérifie les bornes.
- Erreur de Valeur : différencie « type » et « valeur » ; un type peut être correct mais la valeur non.
- Erreur d’Attribut : demande-toi « cet objet sait-il faire cela ? »
Checklist par rôle
Pour le débutant
- Activer l’affichage des caractères invisibles.
- Exécuter souvent de petites portions de code.
- Lire la première ligne de la traceback.
Pour le développeur intermédiaire
- Ajouter des assertions
assert
pour les invariants. - Couvrir les cas limites avec des tests unitaires.
- Configurer un linter et un formatteur automatique.
Pour le relecteur / reviewer
- Vérifier les manipulations d’indices et les boucles mutantes.
- Contrôler la gestion des valeurs d’entrée et des retours
None
. - S’assurer que l’interface des fonctions est documentée (types et valeurs acceptées).
Raccourci de dépannage (cheat sheet)
- IndentationError -> vérifier tab/space, alignement des blocs.
- SyntaxError -> lire la ligne + précédente, chercher parenthèses/guillemets manquants.
- IndexError -> vérifier
len()
and ranges; préférerfor x in seq
. - ValueError -> valider l’entrée; try/except lors des conversions.
- AttributeError ->
type()
/dir()
; vérifier initialisation et retoursNone
.
Snippets réutilisables
- Vérifier qu’une variable n’est pas None:
if obj is None: raise ValueError("obj ne doit pas être None")
- Accès sûr à un attribut:
name = getattr(user, 'name', 'inconnu')
- Parcourir en évitant les IndexError:
for i, val in enumerate(my_list): # traitement sûr
Mini-FAQ
Que faire si je reçois une erreur mais que la trace pointe loin dans ma pile d’appels ?
Regardez la première ligne qui appartient à votre code (pas celles des bibliothèques). C’est souvent là que se trouve la cause.
Les linters peuvent-ils attraper toutes ces erreurs ?
Les linters attrapent beaucoup de problèmes (indentation, certaines SyntaxError, usages suspects) mais pas toutes les ValueError liées à des données d’exécution. Les tests restent indispensables.
Dois-je attraper toutes les exceptions avec un try/except général ?
Non. Attraper toutes les exceptions masque les bugs. Attrapez des exceptions précises et traitez-les ou journalisez-les clairement.
Glossaire rapide (une ligne chacun)
- Indentation : espace en début de ligne qui définit les blocs en Python.
- Syntaxe : règles qui définissent un code valide.
- Index : position d’un élément dans une séquence, commence à 0.
- Valeur : donnée concrète fournie à une fonction.
- Attribut : propriété ou méthode appartenant à un objet.
Exemples d’acceptance tests simples
- Indentation: exécuter un script de test de formatting (black) et s’assurer qu’il ne lève pas d’erreur.
- Syntaxe: exécuter
python -m py_compile
sur le package. - Index: cas de test pour liste vide, longueur 1, longueur >1.
- Value: tests de conversion
int()
avec entrées valides et invalides. - Attribute: tests pour les comportements quand un objet attendu est None.
Social preview suggestions
- Titre OG : 5 erreurs Python courantes — guide de correction
- Description OG : Identifiez et corrigez rapidement les erreurs Python les plus fréquentes avec exemples et checklists.
Foire aux questions (section pour JSON-LD)
Comment lire une traceback Python ?
La traceback liste les appels de fonctions en partant de la plus ancienne à la plus récente. Repérez la première ligne qui pointe vers votre fichier source pour trouver la cause initiale.
Quel outil recommander pour un débutant ?
Un IDE comme VS Code avec les extensions Python, black et flake8. Ils offrent coloration, linting et formatage automatique.
Python reste un excellent langage d’apprentissage. Avec ces règles, checklists et snippets, vous pourrez localiser et corriger ces erreurs plus rapidement. Pratiquez régulièrement, ajoutez des tests simples et standardisez votre configuration d’éditeur pour réduire considérablement ces erreurs répétitives.
Matériaux similaires

Fonds d'écran différents par écran Android

Surveillance Apache Tomcat — compteurs et règles

Protégez-vous du clickjacking

Fonds différents par écran sur Android

Supprimer vos données des courtiers en ligne
