Repérer les bugs : typages, effets de bords, débordements
- Fiche de cours
- Quiz et exercices
- Vidéos et podcasts
- Repérer les problèmes de typage.
- Repérer les effets de bord.
- Repérer les problèmes de débordement de tableau.
- Les opérations classiques et les fonctions ne s’utilisent pas avec tous les types de valeurs ou de données.
- Les données de type mutable peuvent créer des effets de bord. Il faut être vigilant.
- Le parcours d’un tableau peut engendrer des problèmes de débordement.
- Connaitre les différents types de base. (1re)
- Prototyper une fonction en Python. (1re)
Un bug peut avoir deux conséquences principales : le programme ne peut pas être exécuté correctement, ou le programme s’exécute mais ne fait pas ce que l’on veut.
Bien programmer, c’est avant tout bien choisir le type des valeurs et des données utilisées et bien en connaitre les caractéristiques.
En Python, certaines opérations (+, -, /, *, etc.) s’utilisent avec différents types sans pour autant avoir la même signification.
En Python, l’opération « + » a une utilisation différente suivant les types de valeurs ou de données utilisées :
- + est l’addition mathématique pour les valeurs de type int, float.
- + est la concaténation (mise bout à bout) pour les données de types list, str, tuple.
En revanche, l’opérateur « - » s’utilise sur les valeurs de type int ou float, mais pas sur les données de types list, str, tuple.
Ce code génère une erreur
TypeError : unsupported operand type(s) for -.
Cela signifie explicitement (mais en anglais)
qu’il y a une erreur de typage dans
l’utilisation de
l’opérateur « - ».
Lorsqu’un code Python génère une erreur, un message d’erreur apparait. Pour le comprendre, il faut le lire de bas en haut.
- Repérer en dernière ligne du message quelle sorte d’erreur est générée (TypeError, ValueError, ZeroDivisionError, SyntaxError, NameError, etc.). Le nom de l’erreur est en anglais mais est souvent assez explicite.
- Lire la ligne à laquelle l’erreur est repérée. Attention, ce n’est peut-être pas la ligne où l’erreur se situe mais bien la ligne où Python bloque l’exécution du code.
Pour écrire la chaine de caractères "Python 3" à partir de "Python " et du nombre entier 3, il faut écrire le code "Python " + str(3). L’opération + est en effet ici la concaténation : il faut concaténer deux chaines de caractères, c’est pourquoi il faut transformer 3 en "3" avec la fonction str().
Le code "Python " + 3 génère une erreur de typage.
La fonction len() prend pour arguments des données de types list, str, tuple mais pas des entiers.
len("1234") renvoie 4 car "1234" est du type str.
En Python, cela se rencontre souvent avec les structures mutables comme les tableaux (de type list) ou les dictionnaires (de type dict).
La fonction func() suivante est à effet de bord.
Python | Explication |
tab = [1, 1, 2, 3, 5, 8, 13] | On définit le tableau tab. |
def func(): tab.append(tab[-1]+tab[-2]) |
On définit la fonction func() qui ajoute à la fin de tab la somme de ses deux derniers éléments. |
À chaque appel de func(), la variable tab est modifiée alors
qu’elle est extérieure au code qui
définit func(). Cela ne
génère pas d’erreur mais peut
entrainer des erreurs de conceptions plus globales
puisqu’il devient difficile de maitriser le
contenu de la variable tab.
On peut le voir ci-dessous sur Python Tutor.
Voici un code dont le but est d'affecter la chaine de caractères "Python 3" à la variable mot.
En Python, un tableau de taille n est indexé de 0 à n – 1.
Une erreur classique est de vouloir accéder à l’élément d’indice n, élément qui n’existe pas.
Cela génère une erreur IndexError : list index out of range.
On considère le tableau tab = [1, 2, 3, 4, 5].
Le tableau tab contient 5 éléments mais tab[5] n’existe pas.
Il est possible de modifier un tableau pendant son parcours et d’en modifier dynamiquement la taille. Cela peut créer un débordement de tableau. C’est pourquoi il est parfois nécessaire de créer un nouveau tableau plutôt que de modifier le tableau en plein parcours.
On considère le tableau tab = [1, 1, 2, 3, 5, 8, 13].
On souhaite retirer les éléments pairs de cette liste avec le code suivant.
Pour éviter cette erreur, il suffit de créer un second tableau.
En Python, il est important de connaitre le nom des erreurs rencontrées et leurs significations.
Nom d’erreur | Signification |
TypeError | Il y a un problème d’utilisation de variables à cause de leur type. |
UnboundLocalError | Une variable est utilisée dans une fonction, n’y est pas définie et, a priori, n’existe pas à l’extérieur de la fonction. |
IndexError | Il y a un problème de débordement. |
ZeroDivisionError | Un calcul contient une division par 0. |
SyntaxError | Il y a une erreur de syntaxe. |
IndentationError | Il y a une erreur d’utilisation des indentations. |
NameError | Un nom de variable est utilisé mais n’existe pas. |
Des quiz et exercices pour mieux assimiler sa leçon
La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.
Des exercices variés pour ne pas s’ennuyer
Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !
Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.
Des quiz pour une évaluation en direct
Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.
myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.
Des vidéos et des podcasts pour apprendre différemment
Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.
Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !
Des podcasts pour les révisions
La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.
Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.
Des vidéos de cours pour comprendre en image
Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !