Python : Les exceptions
Introduction
Les erreurs que peut rencontrer Python peuvent être interceptées et traitées.
A quoi cela sert-il ?
Quand Python rencontre une erreur dans votre code, il lève une exception.
1 | var = 1/10 # Exemple avec une division par 0 |
Avec:
- “ZeroDivisionError” : Le type de l’exception.
- “integer division or modulo by zero” : le message pour nous aider à comprendre l’erreur.
Python lève une exception quand il trouve une erreur:
- Soit dans le code (syntaxe,…)
- Soit dans l’opération demandée par le code
Types d’exceptions
On trouve différents types d’exceptions:
- ValueError : Erreurs de “valeurs”, ce référer au message associé.
- SyntaxError : Erreurs de “syntaxe” dans le code, ce référer à ligne indiquée.
- RuntimeError : Erreurs système ou matériel.
- …
Pour l’ensemble de ces erreurs, Python nous donne le fichier et la ligne à laquelle c’est produite l’erreur ainsi qu’une indication sur le problème. Cela suffit généralement à le régler.
Forme minimale du bloc “try”
1 2 3 4 | try: # On test un bout de code year = input() # On demande a l'utilisateur d'entrer une date, "input()" attend un nombre except: print "Erreur lors de conversion de l'annee. Merci de saisir un nombre." # Si le code contenu dans le "try" genere une erreur, le code contenu ici est execute |
Avec:
- Le mot clé try suivi des habituels deux points “:” (signifie « essayer », en anglais)
- Le bloc d’instructions à essayer
- Le mot clé except suivi, lui aussi, des deux points “:”.
Il se trouve au même niveau d’indentation que le try. - Le bloc d’instructions qui sera exécuter si une erreur est trouvée dans le premier bloc
Exemple
1 2 3 4 | try: # On test un bout de code # Code a tester except: # Code execute en cas d'erreur |
Vous pouvez intégrer cette forme rapidement et facilement dans vos codes.
De plus, cette méthode est assez grossière. Elle essaye une instruction et intercepte n’importe quelle exception liée à cette instruction.
Forme plus complète
1 2 3 4 | try: resultat = numerateur / denominateur except: print "Une erreur est survenue, mais laquelle ??" |
Plusieurs erreurs sont susceptibles d’intervenir, chacune levant une exception différente:
- NameError : l’une des variables numerator ou denominator nator n’a pas été définie (elle n’existe pas).
- TypeError : l’une des variables numerator ou denominator ne peut diviser ou être divisée (les chaînes de caractères ne peuvent être divisées, ni diviser d’autres types, par exemple).
- ZeroDivisionError : Si denominator vaut 0.
Il va donc falloir ici préciser le type d’exception que nous souhaitons traiter.
1 2 3 4 5 6 7 8 | try: resultat = numerateur / denominateur except NameError: print "La variable numerateur ou denominateur n'a pas ete definie." except TypeError: print "La variable numerateur ou denominateur est d'un type incompatible avec une division." except ZeroDivisionError: print "La variable denominateur est egale a 0." |
Il est possible d’afficher le message de l’exception à l’aide du mot clé “as”.
1 2 3 4 | try: resultat = numerateur / denominateur except NameError as exceptionText: print "Voici l'erreur: %s" % (exceptionText) |
Objectif : Garder le maximum de contrôle sur son code afin d’anticiper les erreurs.
Cours basé sur les travaux de Vincent Le Goff