Fiche de cours

Repérer les bugs : typages, effets de bords, débordements

Lycée   >   Terminale   >   NSI   >   Repérer les bugs : typages, effets de bords, débordements

  • Fiche de cours
  • Quiz et exercices
  • Vidéos et podcasts
Objectifs
  • Repérer les problèmes de typage.
  • Repérer les effets de bord.
  • Repérer les problèmes de débordement de tableau.
Points clés
  • 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.
Pour bien comprendre
  • Connaitre les différents types de base. (1re)
  • Prototyper une fonction en Python. (1re)
1. Les bugs
Dans un programme informatique, un bug (ou bogue) est un défaut de conception qui cause un dysfonctionnement.

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.

2. Les problèmes de typage

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.

a. Les opérations et types

En Python, certaines opérations (+, -, /, *, etc.) s’utilisent avec différents types sans pour autant avoir la même signification.

Toutes les opérations ne sont toutefois pas utilisables avec tous les types.
Exemples
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 « - ».

Méthode
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.
  1. 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.
  2. 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.
En Python, le typage est fort, c’est-à-dire qu’il n’y a aucune interprétation implicite de typage lorsque l’on fait une opération.
Exemple
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.

b. Fonction et types
En Python, les fonctions ne prennent pas forcément pour paramètres tous les types de valeurs ou de données. Il convient de bien s’informer avant de les utiliser.
Exemple
La fonction len() prend pour arguments des données de types liststrtuple mais pas des entiers.
Ici len(1234) renvoie une erreur puisque 1234 est de type int.
len("1234") renvoie 4 car "1234" est du type str.
3. Les effets de bord
a. Types mutables
Une fonction est à effet de bord si elle modifie une variable en dehors de son environnement local.

En Python, cela se rencontre souvent avec les structures mutables comme les tableaux (de type list) ou les dictionnaires (de type dict).
Exemple
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.

b. Mot clé global
Les variables de type immuable (int, float, str, tuple, etc.) ne permettent pas d’utiliser nativement les effets de bord. Cela peut entrainer des erreurs du type UnboundLocalError, qui signifie que l’on veut utiliser une variable globale comme locale.
Le mot clé global permet de pallier cela. Ce n’est cependant pas recommandé.
Exemple
Voici un code dont le but est d'affecter la chaine de caractères "Python 3" à la variable mot.

L’exécution de ce code génère une erreur :
Pour remédier à cela, il est possible de déclarer la variable mot comme globale dans la définition de la fonction.
4. Les débordements de tableaux
a. Erreur d'indexation

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.

Exemple
On considère le tableau tab = [1, 2, 3, 4, 5].
Le tableau tab contient 5 éléments mais tab[5] n’existe pas.
b. Modification de tableau

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.

Exemple
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.
Ce code génère une erreur IndexError : list index out of range, puisque la taille de tab diminue dès que l’on retire un élément pair.

Pour éviter cette erreur, il suffit de créer un second tableau.

5. Bilan sur les erreurs rencontrées en Python

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.

Évalue ce cours !

 

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.

S’abonner

 

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.

S’abonner

 

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.

S’abonner

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 !

S’abonner

 

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.

S’abonner

 

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 !

S’abonner

Découvrez le soutien scolaire en ligne avec myMaxicours

Plongez dans l'univers de myMaxicours et découvrez une approche innovante du soutien scolaire en ligne, conçue pour captiver et éduquer les élèves de CP à la terminale. Notre plateforme se distingue par une riche sélection de contenus interactifs et ludiques, élaborés pour stimuler la concentration et la motivation à travers des parcours d'apprentissage adaptés à chaque tranche d'âge. Chez myMaxicours, nous croyons en une éducation où chaque élève trouve sa place, progresse à son rythme et développe sa confiance en soi dans un environnement bienveillant.

Profitez d'un accès direct à nos Profs en ligne pour une assistance personnalisée, ou explorez nos exercices et corrigés pour renforcer vos connaissances. Notre assistance scolaire en ligne est conçue pour vous accompagner à chaque étape de votre parcours éducatif, tandis que nos vidéos et fiches de cours offrent des explications claires et concises sur une multitude de sujets. Avec myMaxicours, avancez sereinement sur le chemin de la réussite scolaire, armé des meilleurs outils et du soutien de professionnels dédiés à votre épanouissement académique.

Fiches de cours les plus recherchées

NSI

Repérer les bugs : structures

NSI

Anticiper les erreurs classiques

NSI

Utiliser Python pour déterminer les mesures des arbres binaires

NSI

Utiliser Python dans les arbres binaires de recherche

NSI

Rechercher et insérer une clé dans un arbre binaire de recherche

NSI

Parcourir un arbre binaire

NSI

Se déplacer dans un graphe

NSI

Utiliser la méthode « diviser pour régner »

NSI

Programmer de manière dynamique

NSI

Étudier la complexité mémorielle