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 pour 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 qu'"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 addition(a, b):
return a - b
c = addition(15, 18)
print(c)
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 calcule_aire(longueur, largeur): return longueur * largeur long = 10 aire = calcule_aire(long, larg) print(aire)
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#
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 l'hypoténuse est connu.
from math import sqrt
def calcule_hypotenuse(cathete1, cathete2)
hypotenuse = sqrt(cathete1**2 + cathete2**2)
return hypotenuse
def calcule_aire(base, hauteur):
return base * hauteur / 2
def calcule_perimetre(cote1, cote2, cote3):
return cote1 + cote2 - cote3
base = 500
demi_base = base / 2
cote = calcule_hypotenuse(demi_base, demi_base)
aire = calcule_aire(hypotenuse, demi_base)
perimetre = calcule_perimetre(base, cote, cote)
print("L'aire vaut" aire "et le périmètre vaut" perimetre)
Solution
Erreurs de syntaxe:
Ligne 3:
SyntaxError: expected ':'
-> il manque les 2 points à la fin de la ligne.Ligne 18:
SyntaxError: invalid syntax. Perhaps you forgot a comma?
-> il manque une virgule entre la chaîne de caractère et le variableaire
.
Erreur d'exécution:
Ligne 16:
NameError: name 'hypotenuse' is not defined
-> nous avons appelé l'hypoténuse du triangle de départbase
.
Erreur de logique:
Le calcul du périmètre n'est pas correct, il faut additionner les trois côtés.