Comment gérer Les erreurs. Python try exception

Quand on débute dans la programmation python, on est amené à rencontrer des erreurs de tous genres. Il est donc important de comprendre les erreurs pour pouvoir les gérer facilement. Les instructions de python exception permettent de gérer les erreurs de programmation python.

man people art sign
python exception
Photo by Vie Studio

Programmer en python

Il est très facile à apprendre à programmer en python. Mais malgré tous les efforts possibles, c’est inévitable de faire des erreurs. C’est d’ailleurs grâce aux erreurs qu’on enrichi son apprentissage de coder en python. Il faut donc être préparé pour résoudre les erreurs de programmation

Python debug

Les bogues sont des erreurs de programmation. Dès qu’il rencontre une erreur, le programme python plante, il s’arrête subitement en affichant des messages d’erreurs, ceux-ci sont en général très explicites et permettent d’identifier la source d’erreur. La compréhension des erreurs permet de débuguer le code. Faire un python debug, ou tout simplement un débogage est le fait de corriger les erreurs de programmation.

Python exception

Les erreurs dans la programmation sont inévitables. Il faut donc savoir les gérer et les anticiper. Python exception est le fait d’anticiper une erreur puis d’exécuter une action en conséquence. En effet, quand l’exécution du code arrive à l’endroit où on gère l’erreur, on peut, par exemple, contourner le problème en forçant le programme à utiliser une autre partie du code sans erreur. On peut aussi et tout simplement afficher un message qui prévient l’utilisateur de l’erreur commise. 

Python try

Si l’on veut tester une partie du programme on utilise l’instruction python try. Cette instruction permet de s’arrêter un moment sur une ligne de code lorsque celle-ci est susceptible de retourner une erreur. Ainsi le programme peut continuer vers une python exception si l’erreur a eu lieu. Dans le cas échéant le programme continue suivant des règles bien définies.

Python exception

Effectivement, l’instruction python except permet de créer une exception en fonction de l’erreur de programmation. L’instruction de python exception est suivie par la catégorie de l’erreur. Certaines de ces catégories ainsi que leurs significations sont rappelées à la fin de cet article.

Si aucune des exceptions n’est relevée, on peut rediriger le programme vers une partie du programme précédée par l’instruction else.

Python finally

Cette instruction constitue une issue par laquelle le programme passera et ce quoiqu’il soit l’état des python exceptionprécédentes.

Structuration de python exception

a=5
b=0
try:
    s = a/b
except ZeroDivisionError:
    print(" Attention division par 0 ! ")
except NameError:
    print(" une variable non identifiée")
else:
    print("aucune exception relevée")
finally:
    print("la suite du programme dans tous les cas")

Le bout de code ci-dessus montre la structure de python exception. L’exécution de ce programme renvoie la réponse suivante :

Attention division par 0 !

Alors que maintenant on sait comment gérer les erreurs et faire des python exception, il est nécessaire de comprendre les erreurs que l’on peut rencontrer en faisant de la programmation python. Les erreurs dans la programmation pythonsont de 3 types différents.

Syntax error (erreur de syntaxe)

Tout d’abord on va aborder les erreurs de syntaxe. Comme les langages parlés, les langages de programmation ont aussi une syntaxe. Et python a sa propre syntaxe. Dès lors que l’on commette une erreur de syntaxe, ou une syntax errorl’exécution du programme s’arrête puis on voit affiché dans la fenêtre d’exécution des messages d’erreur.

Erreur du résultat obtenu (erreur sémantique)

Ensuite il y a les erreurs sémantiques. Ce type d’erreur est un peu plus compliqué à corriger, car le programme s’exécute correctement mais le résultat qu’il affiche ne correspond pas aux attentes. Il faudra donc analyser le programme presque ligne par ligne pour identifier la source d’erreur.

Erreur d’exécution

Enfin, il y a les erreurs d’exécution. Ce type d’erreur est inévitable surtout lorsqu’on travaille sur des projets plus ou moins gros. Ces erreurs arrivent quand vous essaierez de lire un fichier mais le chemin qui y mène est erroné, ou su vous essaierez de faire des opérations mathématiques entre des variables de types incompatibles…

Ces erreurs, dites erreurs d’exception, sont facilement gérables avec des méthodes bien spécifiques.

Pour provoquer une erreur de ce type, ouvrez un terminal python (Idle par exemple) et tapez 5+ »r », vous obtiendrez l’erreur suivante :

5+ »r », vous obtiendrez l’erreur suivante :

>>> 5+ »r »

Traceback (most recent call last):

  File « <pyshell#14> », line 1, in <module>

    5+ »r »

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

>>> 

>>> 5+2.2

7.2

>>> « r » + « iz »

‘riz’

>>> 

Comme on peut le voir sur l’exemple ci-dessus, l’opérateur mathématique plus (+) sait additionner des nombres, il sait aussi additionner des lettres, mais il ne sait pas faire l’addition d’un mélange de nombres et de lettres.

Message d’erreur. Python exception

Dans la programmation python les messages d’erreur sont généralement accompagnés d’une petite explication en anglais. Le sens de lecture des messages d’erreur est du bas vers le haut.

En plus de cette explication courte, le message d’erreur affiche :

  • Le nom du fichier qui contient l’erreur ;
  • Le numéro de la ligne où l’erreur a été détectée ;
  • Une réplique de la ligne de l’erreur
  • Un indice qui permet de préciser ce qu’il faut corriger pour débuguer le programme ;
  • Et la catégorie de l’erreur.
Une image contenant texte

Description générée automatiquement
python exception

print(« toto)

  File « <stdin> », line 1

    print(« toto)

               ^

SyntaxError: EOL while scanning string literal

Dans le cas de l’exemples ci-dessus, on remarque que l’erreur est de catégorie syntaxerror. L’instruction print() qui permet d’afficher sur la fenêtre d’exécution n’est pas utilisée correctement, la parenthèse n’a pas été fermée.

>>> Print(« toto »)

Traceback (most recent call last):

  File « <stdin> », line 1, in <module>

NameError: name ‘Print’ is not defined

Et dans ce deuxième exemple, l’exécuteur n’a pas compris l’instruction Print, le P étant écrit en majuscule. Cette erreur est de type NameError comme on peut le voir dans le message d’erreur.

Voici quelques sources d’erreur récurrentes :

  • Ne pas respecter la casse. Il ne faut pas écrire en majuscule l’instruction print
  • Mettre des parenthèses après print, et s’assurer que la parenthèse est bien fermée
  • Écrire le texte à afficher entre guillemets

Et voici quelques catégories d’erreurs récurrentes en python :

NameError. Python exception

Cette erreur est très souvent rencontrée. En effet, comme python est sensible à la casse, il suffit d’inverser l’écriture d’une lettre (minuscule en majuscule ou l’inverse) et on obtient ce genre d’erreur. Voici un exemple :

>>> a=5

>>> b=3

>>> s = a*B

Traceback (most recent call last):

  File « <stdin> », line 1, in <module>

NameError: name ‘B’ is not defined

Dans l’exemple on a deux variables a et b. et une troisième variable qui se calcule à partir de la multiplication de a par b. Dans le message d’erreur NameError on comprend que la variable B n’est définie. Effectivement, la variable définie au début du programme est b et non B !

TypeError. Python exception

Dans la programmation python, chaque variable est typée. Si la variable ne prend que des nombres entiers, alors celle-ci est de type entier, (« integer » ou « int » en langage de programmation). Si la variable est une chaine de caractère son type est alors « string » ou « str ». il existe plusieurs autres types que l’on peut découvrir dans la documentation officielle de python relative aux types.

Memoryerror python 

Cette erreur est déclenchée lorsque le calculateur est à court de mémoire. Il faudra fermer certains programmes qui consomment beaucoup de mémoires. La fonction malloc() du C gère la structure interne de la mémoire.

ZeroDivisionError

>>> a=5

>>> b=0

>>> s = a/b

Traceback (most recent call last):

  File « <stdin> », line 1, in <module>

ZeroDivisionError: integer division or modulo by zero

Comme on peut le constater, ce message d’erreur concerne les divisions par zero. La division par zéro étant une forme indéterminée, python envoie un message d’erreur pour prévenir de ce cas de figure.

FileNotFoundError

Ce message d’erreur apparait lorsque python tente d’ouvrir ou d’utiliser un fichier mais il ne le trouve pas. Soit parce que il’y a une erreur dans le chemin d’accès au fichier, soit parce que le fichier n’existe vraiment pas.

ImportError

Ce message d’erreur apparait généralement quand on veut importer un module et python ne le trouve. Soit parce que le module n’a pas été installé ou bien parce que le chemin d’accès au module n’est pas renseigné.

IndentationError 

Celui qui n’est jamais tombé sur cette erreur qu’il me jette la première pierre ! 

La programmation python est très sensible à l’indentation des lignes de code. Cela a un grand avantage, c’est le fait de bien structurer le programme et le rendre compréhensible. 

Voici un récapitulatif d’autres catégories d’erreurs :

  • NameError : variable ou fonction manipulée non déclarée 
  • TypeError : type de la variable incohérent avec l’opération demandée 
  • ValueError : le type est correct, mais pas la valeur 
  • ZeroDivisionError : division par zéro 
  • IndexError / KeyError : tentative d’accès `a une séquence/dictionnaire avec un indice/cl ́e inexistant 
  • FileNotFoundError : le fichier n’existe pas 
  • IOError : erreur lors de la manipulation d’un fichier 
  • SyntaxError : erreur de syntaxe (indentation, parenthèse…) 
Si vous avez aimé l'article vous êtes libre de le partager :)

4 commentaire

  1. Bonjour Hicham, merci beaucoup pour cet article intéressant. Un de mes prestataires a créé des envois de messages en automatique sur Telegram via « Python », le problème c’est que j’ai changé de serveur entre temps. Du coup, plus rien ne fonctionne comme avant. Par exemple, les nouveaux membres ne reçoivent plus de messages de bienvenue. J’aimerais vous contacter en privé. Est-ce que ce serait possible pour vous svp ?

    1. Bonjour,
      avec python on peut faire beaucoup de choses, et sa principale utilité est l’automatisation de taches chronophages répétitives et pénibles mais essentielles.
      Alors la réponse que je peux donner à votre problème est la suivante:
      si tout fonctionnait bien avant, et si la seule chose qui a changé entre temps sont les serveurs, il faut aller aux lignes de code qui permettent de se connecter aux serveurs et voir si les adresses des nouveau serveurs ont bien été ajoutées et si la connexion se passe correctement.
      Bon courage et tenez moi au-courant pour la suite.

  2. Bonjour. Merci pour cet article qui nous permet de mieux comprendre python et de garder nos cheveux sur la tête. Je vois que ce langage est celui qui est abordé au lycée. Est-ce parce qu’il est simple à appréhender ou par sa finalité ? Pourquoi ce langage et pas un autre comme du JS ou du PHP ?

    1. Bonjour,
      Effectivement, python est le langage préconisé au lycée parce qu’il est très simple à prendre en main et à faire des petits programmes sans forcément connaitre les fondamentaux de l’informatique..

Laisser un commentaire