Erreurs#
En appuyant sur le bouton Run, Python va d'abord compiler le programme et ensuite l'exécuter.
Compilation#
Lors de la compilation, Python
lit le code,
vérifie qu'il ne comprend pas d'erreur de syntaxe,
transforme le code en un langage compréhensible par l'ordinateur.
Exécution#
L'exécution sera effectuée seulement s'il n'y a pas eu de problème pendant la compilation. Python va exécuter les instructions du programme, suivant un ordre bien défini.
En programmation, il existe trois types d'erreurs:
Les erreurs de syntaxe
Les erreurs d'exécution
Les erreurs de logique
Erreur de syntaxe#
Les erreurs de syntaxe sont détectées lors de la compilation. Python vérifie que la syntaxe est correcte:
les
:
sont présents et au bon endroit → SinonSyntaxError
une parenthèse ouverte est toujours fermée → Sinon
SyntaxError
un guillemet ouvert est toujours fermé → Sinon
SyntaxError
l'indentation est correcte → Sinon
IndentationError
...
Si Python trouve une erreur de syntaxe, le programme s'arrête, car il ne comprend pas le programme et ne peut donc pas l'exécuter. L'erreur est affichée sur la console.
Exemple 1#
n = 7
if n < 10
print("n est plus petit que 10.)
else:
print("n est plus grand ou égal à 10."
Erreur d'exécution#
Les erreurs d'exécution sont détectée pendant l'exécution. La syntaxe est correcte, mais une instruction lui demande de faire quelque chose d'"illégal", par exemple:
une division par zero →
ZeroDivisionError
accéder à la valeur d'une variable qui n'existe pas →
NameError
appeler une fonction avec un nombre de paramètres incorrect →
TypeError
Si Python trouve une erreur d'exécution, il "plante", c'est-à-dire qu'il s'arrête de manière abrupte.
Exemple 2#
a = 7
b = 0
print(a / b)
print(c)
Erreur de logique#
Python ne détecte aucune erreur, le programme est compilé et exécuté, mais le résultat n'est pas celui attendu.
Exemple 3#
def affiche_somme(a, b):
print("La somme de", a, "et", b, "donne", a - b)
affiche_somme(15, 18)
Exercices#
Exercice 1#
Les programmes suivants contiennent tous une erreur.
Trouvez l'erreur, si possible sans exécuter le programme.
Déterminez son type (syntaxe, exécution, logique).
Corrigez-la.
def affiche_aire(longueur, largeur): print(longueur * largeur) long = 10 affiche_aire(long, larg)
n = 0 while n < 10: print(n) n += 2
for i in range(9 / 2): print(i * 5)
for i in range(2) print(i)
Solution
Erreur d'exécution: la variable larg n'est pas définie.
Erreur de syntaxe: l'indentation n'est pas correcte.
Erreur d'exécution: la fonction
range(...)
attend un nombre entier comme paramètre, mais 9/2 = 4.5.Erreur de syntaxe: il manque les :.
Exercice 2#
Le programme suivant contient une erreur de logique. Testez le programme avec différentes valeurs pour la trouver et corrigez-la.
age = 18
if age >= 18:
print("Tu payes le prix adulte.")
elif age >= 65:
print("Tu payes le prix retraité")
else:
print("Tu payes le prix enfant.")
Solution
Le elif
ne sera jamais exécuté, car si l'âge est supérieur ou égal à 65, il
est aussi supérieur ou égal à 18. Donc la condition du if
sera vérifiée.
Exercice 3#
Il est souvent difficile de débugger un code qui ne fonctionne pas. En s'aidant des messages d'erreurs affichés, corrigez le programme ci-dessous qui calcule l'aire et le périmètre d'un triangle isocèle et rectangle dont la base (hypoténuse) est connue.

from math import sqrt
def affiche_aire(base, hauteur)
aire_triangle = base * hauteur
print("L'aire vaut", aire_triangle)
def affiche_perimetre(cote1, cote2, cote3):
perimetre = cote1 + cote2 + cote3
print("Le périmètre vaut" perimetre)
base = 500
cathete = base / 2
cote = sqrt(cathete**2 + cathete**2)
aire = affiche_aire(base, hauteur)
perimetre = affiche_perimetre(base, cote, cote)
Solution
Erreurs de syntaxe:
Ligne 3:
SyntaxError: expected ':'
→ il manque les 2 points à la fin de la ligne.Ligne 9:
SyntaxError: invalid syntax. Perhaps you forgot a comma?
→ il manque une virgule entre la chaîne de caractère et le variableperimetre
.
Erreur d'exécution:
Ligne 14:
NameError: name 'hauteur' is not defined
→ la variablehauteur
n'est pas définie, elle correspond à la variablecathete
.
Erreur de logique:
Le calcul d'aire n'est pas correct, pour un rectangle la formule est \(\dfrac{base \cdot hauteur}{2}\).
Résultat correct:
L'aire vaut 62500.0
Le périmètre vaut 1207.1067811865476