1E: Erreurs

Au fur et à mesure que vous avancerez dans la programmation, vous rencontrerez naturellement beaucoup d'erreurs (ou bogues, adapté de l'anglais "bugs"). Générer, comprendre et régler des erreurs est une partie importante de la programmation. Python fera de son mieux pour exécuter tout ce que vous lui direz d'exécuter, mais s'il ne comprend pas ce que vous lui demandez, il n'exécutera pas votre programme. Dans ce cas, Python vous donnera un peu d'information sur ce qui s'est mal passé afin de vous aider à le résoudre.

Voici deux erreurs Python.

Exemple : Une erreur de syntaxe

Dans ce premier exemple, nous avons oublié d'utiliser les parenthèses qui sont nécessaires pour la fonction print(...). Python ne comprend pas ce que vous essayez de faire.

Voici un deuxième exemple de bogue en Python.

Exemple : Une erreur d'exécution

Dans ce deuxième exemple, nous avons oublié de définir la variable salutations. Python sait ce que vous lui demandez de faire, mais comme salutations n'a pas été défini, une erreur est générée.

Une erreur de syntaxe (syntax error en anglais) est générée lorsque Python ne comprend pas ce que vous lui demandez de faire. Une erreur d'exécution (run-time error en anglais) est générée lorsque Python comprend ce que vous demandez mais qu'il rencontre des problème lorsqu'il suit vos instructions.

En français, une erreur de syntaxe serait comme la phrase

S'il vous plaît chat chien singe.

La grammaire de cette phrase ne donne pas de sens. D'un point de vue de la grammaire française, il manque un verbe (action). Vous ne pouvez pas comprendre ce que l'on vous demande de faire. Syntaxe est synonyme de grammaire en programmation.

En français, une erreur d'exécution serait comme la phrase

S'il vous plaît, mangez le piano.

La phrase donne un sens du point de vue de la grammaire — il y a un verbe et un nom où il se doit — et vous savez donc ce que l'on vous demande de faire. Mais vous allez rencontrer des problèmes lorsque vous allez essayer de manger le piano (sauf si vous êtes un termite). Cela s'appelle une erreur d'exécution car elle a lieu lorsque le programme s'exécute.

Nous parlerons également d'erreurs logiques (logic errors en anglais) à la fin, ce qui signifie que votre programme s'exécute jusqu'au bout sans planter mais qu'il ne produit pas le résultat attendu. En voici un exemple

Veuillez s'il vous plaît fermer la porte arrière afin que les insectes n'entrent pas.

Ce serait une erreur logique si la porte avant était aussi ouverte : même si la commande donne du sens et que vous pouvez fermer la porte arrière, cela n'a pas l'effet escompté de garder les insectes dehors puisqu'ils peuvent entrer par la porte avant.

Erreurs de syntaxe courantes en Python

Voici d'autres exemples d'erreurs de syntaxes qui peuvent être générées en Python. Une chose très générale qui peut arriver est que Python rencontre un symbole qui n'est pas où il est attendu.

Exemple : Erreur de syntaxe

Python nous dit SyntaxError: invalid syntax et pointe avec ^ au point d'exclamation. Le problème est que ! n'a pas de sens en Python. L'erreur de syntaxe disparaitrait si nous écrivions print("Bonjour, Monde!") à la place, parce que Python comprendrait que ! appartient au texte Bonjour, Monde.

Voici une autre erreur de syntaxe qui est plus subtile.

Exemple : Erreur de syntaxe

Le problème est que continue est un mot réservé en Python. Si vous aviez écrit procede au lieu de continue, il n'y aurait pas eu de problème. Cliquez ici pour voir la liste de tous les "mots réservés" en Python.

Si vous utilisez les guillemets autour d'un texte et que vous oubliez le 2ème, ou que vous utilisez des parenthèses et que vous oubliez la 2ème, vous aurez une erreur de syntaxe :

Exemple : Erreur de syntaxe
Oubli du 2ème guillemet

Dans cette erreur, EOL signifie End Of Line (fin de ligne) : Python s'attendait à une autre " mais la ligne s'est terminée avant qu'il ne le trouve.

Exemple : Erreur de syntaxe
Oubli de la 2ème paranthèse

De même, EOF signifie End OFile : Python a cherché une ) mais la ligne s'est terminée avant qu'il ne la trouve.

Erreurs d'exécution

Voici plusieurs erreurs d'exécution courantes. Python est capable de comprendre ce que le programme dit, mais il est face à des problèmes lorsqu'il essaye d'exécuter des instructions.

  • utiliser une variable ou une fonction non définie. Cela peut aussi arriver si la casse des lettres (majuscules ou minuscules) n'est respectée dans un nom de variable : 
    Exemple
    Une variable non définie
  • diviser par zéro, ce qui ne donne pas de sens en mathématiques. (Pourquoi ? Comme 0 fois n'importe quel nombre est égal à 0, il n'y a pas de solution à l'équation 1 = X * 0, et donc 1/0 n'est pas défini.)
    Exemple
    Diviser par 0
  • utiliser des opérateurs avec des données du mauvais type
    Exemple
    Ajouter du texte et un nombre
  • écrire une virgule , au lieu d'un point . comme séparateur décimal
    Exemple
    Le séparateur décimal devrait être un point comme c'est le cas en anglais.

Vous trouverez d'autres moyens de générer des erreurs au fur et à mesure que vous en apprendrez plus sur Python.

Quelle est la différence technique entre une erreur de syntaxe et une erreur d'exécution ? Voici un exemple qui compare une erreur de syntaxe et une erreur d'exécution. Regardez la sortie du programme.
Exemple : Erreur d'exécution
Exemple : Erreur de syntaxe
Le programme avec l'erreur d'exécution a produit une sortie mais pas celui avec l'erreur de syntaxe. Ceci s'explique par le fait que Python s'exécute en deux étapes :

  1. Python vérifie que la syntaxe de votre programme est correcte, afin de déterminer sa structure et ses différentes parties.
  2. Si aucune erreur de syntaxe n'a été trouvée à l'étape 1, alors le programme est exécuté.

Donc un programme qui a une erreur de syntaxe ne sera pas du tout exécuté, mais un programme avec une erreur d'exécution exécutera les étapes qui se trouvent avant que l'erreur n'aie lieu.

Erreurs logiques

Votre programme peut s'exécuter sans planter (pas d'erreurs de syntaxe ni d'erreurs d'exécution) mais tout de même ne pas faire ce qu'il est supposé faire. Par exemple, peut être que vous voulez que votre programme calcule la moyenne de deux nombres : la moyenne de x et y est définie par

\displaystyle{\frac{x+y}{2}}

Pourquoi ce programme ne fonctionne-t-il pas ?

Exemple
Cela ne calcule pas la moyenne correctement.

La moyenne devrait être

\displaystyle{\frac{x+y}{2}=\frac{3+4}{2}=\frac{7}{2}=3.5}

mais le programme écrit 5.0 ! L'erreur est liée à "l'ordre des opérations" en arithmétique. Quand vous écrivez x + y / 2, cela signifie mathématiquement x + (y / 2) = 3 + (4 / 2) = 3 + 2 = 5. Pour résoudre le problème, la troisième ligne de notre programme devrait être moyenne = (x + y) / 2, ce qui indique clairement à Python que nous voulons la valeur \frac{x+y}{2}, où nous additionnons d'abord puis divisons ensuite.

Vous avez des erreurs logiques parce que vous n'avez pas conçu votre programme correctement, ou parce que vous n'avez pas écrit votre code en suivant votre conception correctement (comme la moyenne par exemple). Les erreurs logiques sont difficiles à détecter, surtout dans un long programme, mais en vous améliorant à écrire du code, vous deviendrez aussi meilleur à éviter les erreurs logiques. La leçon 6D vous donnera des indices pour éviter les erreurs logiques.

Exercices

Maintenant que vous avez complété la leçon, nous avons trois exercices sur le débogage (résoudre les erreurs dans les programmes). Vous pouvez essayer de trouver les erreurs avant d'exécuter les programmes, ou vous pouvez d'abord les exécuter et utiliser les réponses de Python pour déterminer ce qui doit être fixé.

Chaque programme vient avec du code déjà préparé pour vous. Vous devez seulement changer quelques caractères (lettres/symboles/nombres) pour fixer chaque programme. Le correcteur rejettera les solutions qui changent trop de caractères. Sélectionnez  Réinitialiser code si vous voulez revenir à la version originale.

Exercice de code : Additionneur
Fixez la syntaxe du programme suivant pour qu'il écrive la somme des nombres de 1 à 10. Vous pouvez changer au plus un caractère.

Exercice de code : Bonjour Joe
Fixez l'erreur d'exécution dans le programme suivant pour qu'il imprime Bonjour sur la première ligne et Joe sur la seconde ligne. Vous pouvez changer au plus deux caractères.

Le dernier problème est plus difficile que les deux précédents. Si vous êtes bloqués, vous pouvez passer l'exercice et passer à la prochaine leçon. Vous pouvez toujours vérifier quels problèmes vous avez complétés ou passés en allant sur la page Mon progrès.

Exercice de code : Croissance
Fixez l'erreur logique dans ce programme : il devrait calculer la population dans votre pays pour les trois prochaines années, en supposant qu'elle commence avec 1000 personnes en 2012, et que le nombre de personnes augmente de 10% par année. Vous pouvez changer au plus 3 caractères.
Si vous êtes bloqué, cliquez ici pour un indice.

Une fois que vous avez trouvé tous les bogues, allez à la prochaine leçon !