×

[section label= »Introduction » anchor= »introduction »]

Introduction

Les erreurs que peut rencontrer Python peuvent être interceptées et traitées.

cours-python-les-exceptions

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

# Error: ZeroDivisionError: integer division or modulo by zero #

Avec:

  • “ZeroDivisionError” : Le type de l’exception.
  • “integer division or modulo by zero” : le message pour nous aider à comprendre l’erreur.

[alert variation= »alert-info »]

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

[/alert]

[section label= »Types d’exceptions » anchor= »types-exceptions »]

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.

[section label= »Forme minimale du bloc try » anchor= »forme-minimale« ]

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.

[alert variation= »alert-warning »]Si une erreur se produit, le système affiche certes une erreur mais le script continue et risque donc de planter ![/alert]

De plus, cette méthode est assez grossière. Elle essaye une instruction et intercepte n’importe quelle exception liée à cette instruction.

[alert variation= »alert-danger »]Cette forme minimale est donc à éviter.[/alert]

[section label= »Forme plus complète » anchor= »forme-complete« ]

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

Partager sur:

Photographe professionnel, originaire d'Alsace (France), ancien Directeur Technique sur les films d'animation "Minions", "Moi, Moche et Méchant" et "Le Lorax".

Laisser un commentaire