0% ont trouvé ce document utile (0 vote)
4 vues6 pages

Erreurs Python : Guide de Dépannage

Ce document fournit des conseils sur la gestion des erreurs fréquentes en Python, en expliquant comment lire les messages d'erreur et identifier leurs causes. Il présente des exemples de messages d'erreur courants, comme SyntaxError et TypeError, ainsi que des stratégies pour déboguer des programmes qui ne produisent pas les résultats attendus. Enfin, il recommande de décomposer les algorithmes en sous-algorithmes et de tester chaque partie pour assurer leur bon fonctionnement.

Transféré par

mele.hugo1
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues6 pages

Erreurs Python : Guide de Dépannage

Ce document fournit des conseils sur la gestion des erreurs fréquentes en Python, en expliquant comment lire les messages d'erreur et identifier leurs causes. Il présente des exemples de messages d'erreur courants, comme SyntaxError et TypeError, ainsi que des stratégies pour déboguer des programmes qui ne produisent pas les résultats attendus. Enfin, il recommande de décomposer les algorithmes en sous-algorithmes et de tester chaque partie pour assurer leur bon fonctionnement.

Transféré par

mele.hugo1
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PCSI1 - Lycée Fabert (Metz) - 2025-2026 Y.

Loquais

Formulaire Python

1
2
3
Erreurs fréquentes et leurs causes
Le but de cette partie est de vous aider à décrypter les messages d’erreurs les plus fréquents envoyés par
python. Avant d’appeler un enseignant pour vous aider en TP, prenez un peu de temps pour lire le message
d’erreur et pour essayer de trouver la solution par vous même.
Il faut noter qu’un programme ne déclenchant pas de message d’erreur ne conduit pas pour autant forcé-
ment au bon résultat, mais un programme déclenchant un message d’erreur conduit presque tout le temps à
« pas de résultat du tout ».

I. Exemple de message d’erreur et de manière de le lire


I.1. Exemple simple
Voici un exemple de message d’erreur :
1 Traceback ( most recent call last ) :
2 File " C :\ winPython \...\ prog_erreur . py " , line 10 , in < module >
3 y = log ( -1)
4 ValueError : math domain error

1. La première ligne ne nous intéresse pas.


2. La deuxième ligne indique le fichier et la position dans le fichier où l’erreur a été détectée (fichier
prog_erreur.py à la ligne 10) ce qui vous indique où regarder.
3. La troisième ligne indique la commande concernée (y = log(−1) ici)
4. La quatrième ligne est celle qui nous indique l’erreur (erreur par rapport au domaine de définition, en
effet logarithme n’est pas défini pour les valeurs négatives)
L’erreur est ici volontairement évidente, mais si la commande avait été y = log(a), il faut penser à véri-
fier la valeur contenue dans la variable a pour vérifier si elle est négative puis remonter le programme pour
comprendre pourquoi a est négatif.

I.2. Exemple un peu plus effrayant


Voici un exemple de code provoquant une erreur (en faisant appel à une fonction d’une bibliothèque) :
9 from scipy . integrate import quad
10 quad (3 ,4 ,5)
Le message d’erreur correspondant est le suivant :
1 Traceback ( most recent call last ) :
2 File " C :\ winPython \...\ fichier . py " , line 10 , in < module >
3 quad (3 ,4 ,5)
4 File " C :\ winPython \...\ quadpack . py " , line 248 , in quad
5 retval = _quad ( func ,a ,b , args , full_output , epsabs , epsrel , limit , points )
6 File " C :\ winPython \...\ quadpack . py " , line 313 , in _quad
7 return _quadpack . _qagse ( func ,a ,b , args , full_output , epsabs , epsrel ,
limit )
8 quadpack . error : quad : first argument is not callable
Ce genre de long message d’erreur a tendance à faire peur au débutant mais c’est une mine d’information,
il faut juste apprendre à reconnaître quelles sont celles qui nous intéressent.
1. Encore une fois la première ligne ne nous intéresse pas ;
2. la deuxième ligne indique le fichier concerné ([Link]) et l’endroit (ligne 10) ;
3. la troisième ligne indique la commande qui pose problème

4
4. les lignes 4 à 7 nous indiquent les appels successifs de fonctions jusqu’à l’endroit qui pose réellement
problème, c’est intéressant pour la personne qui a créé la fonction si elle a fait un erreur, mais pour nous
ce n’est pas très intéressant (en général l’erreur est plus due à une mauvaise utilisation de notre part qu’à
une mauvaise programmation de la part de la personne qui a créée le module) ;
5. la dernière ligne est celle qui nous intéresse le plus : c’est elle qui explicite l’erreur. Ici l’erreur est que
le premier argument donné à quad doit être « callable » (appelable), c’est-à-dire que ce doit être une
fonction. Or le premier argument que nous avons passé à quad est 3 qui est un entier. Ce n’est donc pas
le bon type d’objet.

II. Messages d’erreurs les plus fréquents et causes

SyntaxError : invalid syntax


Erreur de syntaxe, il faut vérifier :
• la ligne indiquée par python (oubli de « : » après un for/if/while/def par exemple)
• et/ou la ligne précédente (souvent un oubli de parenthèse fermante à la ligne précédente)

IndentationError : unexpected indent


Problème d’indentation, il faut vérifier qu’il n’y a pas d’espace en début de ligne si l’instruction n’est pas censée
être indentée ou qu’il y a le même nombre d’espace qu’aux lignes précédentes/suivantes si l’instruction est
censée être indentée.

IndentationError : expected an indented block


Python attend un groupe d’instructions indenté car il y a une instruction de type for/if/while/def avec un « : »
à la ligne précédente

NameError : name ’x ’ is not defined


Utilisation de la variable ’x’ alors qu’elle n’a pas été définie précédemment dans le programme. Cela peut
arriver en particulier :
• si l’on oublie d’entourer une chaine de caractère d’apostrophes (print(bonjour) renverra cette erreur
et il aurait fallu écrire print(’bonjour’) pour écrire le texte bonjour)
• Si on oublie d’initialiser un compteur ou une variable
• si on tente de faire appel à une variable locale à une fonction dans le programme global.

TypeError : ’X ’ object is not subscriptable


TypeError : ’X ’ object is not iterable
L’objet de type ’X’ (int, float,...) ne peux pas être utilisé comme une liste/un tuple/chaine de caractère. Par
exemple si a = 3, alors a[4] n’a pas de sens et « for elt in a: » non plus.

IndexError : list index out of range


L’indice utilisé pour appeler la liste est trop grand par rapport à la taille de la liste/tuple/chaine. Par exemple
si L=[3,4] alors L[4] n’existe pas. Attention, le dernier élément est L[len(L)-1] et le premier est L[0].

TypeError : ’X ’ object is not callable


L’objet de type ’X’ ne peut pas être appelé : ce n’est pas une fonction.
• oubli de * avant une parenthèse 5(3+1) cherche à appeler la fonction 5 avec l’argument 4
• utilisation de () au lieu de [] pour une liste/tuple/chaine. Par exemple si L = [1, 2], alors il faut écrire
L[0] et non pas L(0) pour accéder au premier élément de la liste.

5
TypeError : unsupported operand type ( s ) for /: ’ list ’ and ’ int ’
L’opération / (par exemple) ne fonctionne pas pour les objets de type liste et entier. Vérifier le type d’objets en
question et l’opération. Par exemple [1, 2]/2 n’a pas de sens.

erreur quelconque avec marqué ’ tuple ’ dans le message alors que vous n ’
avez pas voulu utiliser un tuple
Vérifier que vous n’avez pas utilisé la virgule comme séparateur au lieu du point. Par exemple si quelqu’un
écrit (1,2 + 4) + 3 il aura comme erreur :
TypeError: can only concatenate tuple (not "int")to tuple.
Il aurait dû écrire (1.2 + 4) + 3

III. Mauvais résultat


Il y a d’autres types de bugs possibles dans un programme : le programme tourne, mais le résultat retourné
n’est pas celui attendu. Et là, il est parfois difficile de voir exactement où est la faute.
La méthode sur ce type de problème est la suivante :
1. Décomposer votre algorithme en petits sous-algorithmes ( déjà obtenus lors de la méthode descen-
dante)
2. Vérifier ces petits algorithmes au FUR et à MESURE de l’écriture.
3. Tester chacun de ces sous problèmes : prendre des valeurs petites, faire les calculs à la main, et vérifier
que la machine donne le même résultat.
Mettre des print à des endroits clés pour pouvoir vérifier l’évolution d’une variable stratégique ( celle
qui doit incrémenter par exemple).
4. S’il y a des boucles "if" ou "elif" penser à tester chaque embranchement. ( ou faire afficher la valeur du
test booléen pour vérifier.
5. Enfin, si chacun des sous-problèmes est correct et que le programme global ne fonctionne pas, prendre
un exemple de petite taille, faire les calculs à la main de ce que l’algorithme doit donner, mettez dans
chaque boucle un "print" pour une valeur significative, et vérifier votre programme pas à pas. (Possibilité
d’utilisation d’un débogueur)

Vous aimerez peut-être aussi