Nov 23, 2024

Wiki

Python

Aide

edit SideBar

Search

Exceptions


Présentation

Python permet la gestion des exceptions :

  >>> 10/0
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  ZeroDivisionError: integer division or modulo by zero

Ci-dessus, une exception de type ZeroDivisionError a été levée.

Capture des exceptions

L'exception ci-dessus levée interrompera le programme, à moins d'être capturée, comme suit :

  >>> try:
  ...     10/0
  ... except ZeroDivisionError :
  ...     print "On ne divise pas par 0"
  ... 
  On ne divise pas par 0

Auquel cas, le programme peut se poursuivre. A noter que l'on peut mettre plusieurs exceptions à la suite.

Exception dans un appel de fonctions

Lorsqu'une erreur se produit dans un appel de fontion, elle remonte toutes les couches de code, et le traceback est affiché :

  >>> def toto():
  ...     return tata()
  ... 
  >>> def tata():
  ...     return tutu()
  ... 
  >>> def tutu():
  ...     10/0
  ... 
  >>> toto()
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 2, in toto
    File "<stdin>", line 2, in tata
    File "<stdin>", line 2, in tutu
  ZeroDivisionError: integer division or modulo by zero

Si l'exception levée n'est interceptée par aucune fonction, alors le programme se termine par le message d'erreur levé. Sinon, le programme se poursuit, après avoir géré l'exception comme on lui a dit de faire.

Lever soi-même des exceptions

On peut soit-même lever des exceptions, avec le mot-clé raise :

  >>> def division(x,y):
  ...     if y == 0 :
  ...         raise ZeroDivisionError
  ...     return x/y
  ... 
  >>> division(1,0)
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 3, in division
  ZeroDivisionError
  >>> division(1,1)
  1

Récuperer des variables

Les variables à l'origine des exceptions peuvent être récupérées, comme suit :

  >>> try:
  ...     division(1, 0)
  ... except ValueError, x:
  ...     print "Vous avez voulu diviser ", x, "par 0"
  ... 
  Vous avez voulu diviser 1 par 0

Finally

finally permet de s'assurer qu'une portion de code particulière est bien exécutée, même si le programme provoque une erreur. Cette fonctionnalité permet de terminer proprement certaines opérations comme des écritures de fichiers ou des échanges réseaux...

  >>> f = open('coucou.txt','w')
  >>> try :
  ...     f.write('coucou')
  ... finally :
  ...     f.close()
  ... 

finally est toujours visité, même si un return est placé dans le bloc protégé. Dans ce cas, finally est visité juste avant que la fonction ou la méthode rende la main.

Page Actions

Recent Changes

Group & Page

Back Links