Partie 4 : Erreurs et bonnes pratiques
9. Les erreurs en Python - Guide complet
Section intitulée « 9. Les erreurs en Python - Guide complet »Apprendre à lire et comprendre les messages d'erreur est une compétence essentielle. Python affiche toujours un message qui indique :
- Où l'erreur s'est produite (numéro de ligne)
- Quel type d'erreur c'est
- Un message explicatif
9.1. Lire un message d'erreur (traceback)
Section intitulée « 9.1. Lire un message d'erreur (traceback) »Traceback (most recent call last): File "mon_programme.py", line 3, in <module> print(age + " ans") ~~~~^~~~~~~~TypeError: unsupported operand type(s) for +: 'int' and 'str'- Ligne 1 : début du traceback (remontée de l'erreur)
- Ligne 2 : fichier et numéro de ligne concernés
- Ligne 3 : la ligne de code fautive
- Ligne 4 : une flèche pointant vers l'endroit exact de l'erreur
- Ligne 5 : le type d'erreur et son explication
9.2. Les erreurs de syntaxe - SyntaxError
Section intitulée « 9.2. Les erreurs de syntaxe - SyntaxError »Python ne peut même pas démarrer l'exécution du programme car le code est mal écrit :
# ❌ Oubli du deux-pointsif age >= 18 print("Majeur")# SyntaxError: expected ':'
# ❌ Oubli d'une parenthèse fermanteprint("Bonjour"# SyntaxError: '(' was never closed
# ❌ Oubli d'un guillemet fermantnom = "Alice# SyntaxError: unterminated string literal
# ❌ Utilisation d'un mot réservé comme variableclass = "2nde B"# SyntaxError: invalid syntax
# ❌ Oubli du = dans une affectationif age = 18:# SyntaxError: invalid syntax. Maybe you meant '==' or ':='?9.3. Les erreurs d'indentation - IndentationError
Section intitulée « 9.3. Les erreurs d'indentation - IndentationError »# ❌ Bloc non indentéif True:print("Bonjour")# IndentationError: expected an indented block after 'if' statement
# ❌ Indentation inattenduex = 5 y = 10# IndentationError: unexpected indent
# ❌ Mélange tabulations et espaces (très sournois !)if True: print("tab") # tabulé print("espaces") # 4 espaces# IndentationError: unindent does not match any outer indentation level9.4. Les erreurs de nom - NameError
Section intitulée « 9.4. Les erreurs de nom - NameError »La variable ou la fonction n'existe pas dans le contexte actuel :
# ❌ Variable pas encore définieprint(resultat)# NameError: name 'resultat' is not defined
# ❌ Faute de frappeage_eleve = 16print(age_elve) # 'elve' au lieu de 'eleve'# NameError: name 'age_elve' is not defined
# ❌ Oubli des guillemets autour d'un texteprint(Bonjour)# NameError: name 'Bonjour' is not defined
# ❌ Variable locale utilisée hors de la fonctiondef ma_fonction(): resultat = 42ma_fonction()print(resultat)# NameError: name 'resultat' is not defined9.5. Les erreurs de type - TypeError
Section intitulée « 9.5. Les erreurs de type - TypeError »On essaie de faire une opération incompatible avec le type des données :
# ❌ Additionner un nombre et une chaîneprint(5 + "3")# TypeError: unsupported operand type(s) for +: 'int' and 'str'
# ❌ Concaténer un nombre à une chaîneprint("J'ai " + 16 + " ans")# TypeError: can only concatenate str (not "int") to str
# ❌ Multiplier deux chaînesprint("abc" * "def")# TypeError: can't multiply sequence by non-int of type 'str'
# ❌ Appeler quelque chose qui n'est pas une fonctionx = 5x()# TypeError: 'int' object is not callable
# ❌ Utiliser len() sur un nombrelen(42)# TypeError: object of type 'int' has no len()9.6. Les erreurs de valeur - ValueError
Section intitulée « 9.6. Les erreurs de valeur - ValueError »La valeur n'est pas adaptée, même si le type est correct :
# ❌ Convertir un texte en nombreint("abc")# ValueError: invalid literal for int() with base 10: 'abc'
# ❌ Convertir un décimal en int directementint("3.14")# ValueError: invalid literal for int() with base 10: '3.14'
# ❌ Chercher un élément absent d'une liste[1, 2, 3].index(5)# ValueError: 5 is not in list9.7. Les erreurs d'indice - IndexError
Section intitulée « 9.7. Les erreurs d'indice - IndexError »On accède à un indice qui n'existe pas :
notes = [15, 12, 18]
notes[3]# IndexError: list index out of range# Les indices valides sont 0, 1, 2 (ou -1, -2, -3)
notes[10]# IndexError: list index out of range
# ❌ Erreur classique avec rangefor i in range(len(notes) + 1): # range va jusqu'à 3, mais l'indice 3 n'existe pas print(notes[i])# IndexError: list index out of range9.8. La division par zéro - ZeroDivisionError
Section intitulée « 9.8. La division par zéro - ZeroDivisionError »print(10 / 0)# ZeroDivisionError: division by zero
print(10 // 0)# ZeroDivisionError: integer division or modulo by zero
print(10 % 0)# ZeroDivisionError: integer division or modulo by zero9.9. Tableau récapitulatif des erreurs
Section intitulée « 9.9. Tableau récapitulatif des erreurs »| Erreur | Cause courante | Comment corriger |
|---|---|---|
SyntaxError | Oubli de :, parenthèse, guillemet | Relire la ligne indiquée, vérifier la ponctuation |
IndentationError | Mauvaise indentation ou mélange tab/espaces | Aligner les blocs à 4 espaces |
NameError | Variable inexistante, faute de frappe, oubli de "" | Vérifier le nom, l'ordre des instructions |
TypeError | Opération entre types incompatibles | Convertir avec int(), float(), str() |
ValueError | Conversion impossible (int("abc")) | Vérifier la valeur avant de convertir |
IndexError | Indice hors limites d'une liste | Vérifier len() et les bornes de range() |
ZeroDivisionError | Division par zéro | Tester if diviseur != 0 avant de diviser |
10. Plusieurs façons de faire la même chose
Section intitulée « 10. Plusieurs façons de faire la même chose »En programmation, il existe souvent plusieurs approches pour résoudre un même problème. Voici les plus courantes.
10.1. Construire une chaîne de caractères
Section intitulée « 10.1. Construire une chaîne de caractères »nom = "Alice"age = 16
# Méthode 1 : concaténation avec +message = "Je m'appelle " + nom + " et j'ai " + str(age) + " ans."
# Méthode 2 : virgules dans print()print("Je m'appelle", nom, "et j'ai", age, "ans.")
# Méthode 3 : f-string (recommandée ✅)message = f"Je m'appelle {nom} et j'ai {age} ans."
# Méthode 4 : .format()message = "Je m'appelle {} et j'ai {} ans.".format(nom, age)10.2. Tester si un élément est dans une collection
Section intitulée « 10.2. Tester si un élément est dans une collection »voyelles = "aeiouy"lettre = "e"
# Méthode 1 : avec in (recommandée ✅)if lettre in voyelles: print("C'est une voyelle")
# Méthode 2 : avec une boucleest_voyelle = Falsefor v in voyelles: if lettre == v: est_voyelle = Trueif est_voyelle: print("C'est une voyelle")
# Méthode 3 : avec or (fastidieux mais explicite)if lettre == "a" or lettre == "e" or lettre == "i": print("C'est une voyelle")10.3. Calculer une somme
Section intitulée « 10.3. Calculer une somme »nombres = [3, 7, 2, 9, 4]
# Méthode 1 : boucle for avec accumulateurtotal = 0for n in nombres: total += n
# Méthode 2 : fonction intégrée sum() (recommandée ✅)total = sum(nombres)
# Méthode 3 : boucle whiletotal = 0i = 0while i < len(nombres): total += nombres[i] i += 110.4. Créer une liste de nombres
Section intitulée « 10.4. Créer une liste de nombres »# Méthode 1 : boucle for avec appendcarres = []for i in range(1, 6): carres.append(i ** 2)# [1, 4, 9, 16, 25]
# Méthode 2 : compréhension de liste (plus avancé, très « pythonique »)carres = [i ** 2 for i in range(1, 6)]# [1, 4, 9, 16, 25]
# Méthode 3 : avec list() et range()nombres = list(range(1, 11))# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]10.5. Échanger deux variables
Section intitulée « 10.5. Échanger deux variables »a, b = 10, 20
# Méthode 1 : variable temporaire (classique, universelle)temp = aa = bb = temp
# Méthode 2 : affectation multiple Python (recommandée ✅)a, b = b, a
# Méthode 3 : arithmétique (sans variable supplémentaire, pour les curieux)a = a + b # a = 30b = a - b # b = 10a = a - b # a = 2010.6. Lire une entrée utilisateur et la valider
Section intitulée « 10.6. Lire une entrée utilisateur et la valider »# Méthode 1 : saisie + boucle whilenote = float(input("Note (0-20) : "))while not (0 <= note <= 20): note = float(input("Invalide. Note (0-20) : "))
# Méthode 2 : while True + breakwhile True: note = float(input("Note (0-20) : ")) if 0 <= note <= 20: break print("Invalide, recommencez.")
# Méthode 3 : avec une fonctiondef saisir_note(): while True: note = float(input("Note (0-20) : ")) if 0 <= note <= 20: return note print("Invalide, recommencez.")
note = saisir_note()11. Bonnes pratiques et conseils
Section intitulée « 11. Bonnes pratiques et conseils »12. Tableau récapitulatif complet
Section intitulée « 12. Tableau récapitulatif complet »| Notion | Syntaxe | Ce qu'il faut retenir |
|---|---|---|
| Variable | x = 42 | Espace mémoire nommé qui stocke une valeur |
| Affectation | x = valeur | Le = stocke la valeur de droite dans la variable |
| Affectation augmentée | x += 3 | Raccourci pour x = x + 3 |
| Types | int, float, str, bool | Entier, décimal, texte, booléen |
| Conversion | int(), float(), str() | Change le type d'une valeur |
| Séquence | - | Les instructions s'exécutent de haut en bas |
if / elif / else | if cond: | Exécute un bloc selon qu'une condition est vraie ou fausse |
| Comparaison | ==, !=, <, >, <=, >= | Renvoie True ou False |
| Logique | and, or, not | Combine des conditions |
for | for i in range(n): | Boucle bornée, nombre de répétitions connu |
while | while cond: | Boucle non bornée, répète tant que la condition est vraie |
break | break | Sort immédiatement de la boucle |
continue | continue | Passe directement au tour suivant |
| Fonction | def nom(params): | Bloc de code réutilisable |
return | return valeur | Renvoie un résultat depuis une fonction |
| Liste | [1, 2, 3] | Collection ordonnée et modifiable de valeurs |
input() | input("message") | Lit une saisie (renvoie toujours un str) |
print() | print(valeurs) | Affiche des valeurs à l'écran |
| f-string | f"texte {var}" | Insère des variables dans du texte |
© 2026 Corentin Dupont - LyCode
Créé avec Astro Starlight