Académique Documents
Professionnel Documents
Culture Documents
Les exceptions
Nicolas Delestre
Exceptions - v1.1.1 1 / 17
Plan
1 Rappels
3 with
Exceptions - v1.1.1 2 / 17
Rappels
Rappels 1 / 3
Exceptions - v1.1.1 3 / 17
Rappels
Rappels 2 / 3
Exceptions - v1.1.1 4 / 17
Rappels
Rappels 3 / 3
Quand lever une exception ?
Deux cas :
1 Une erreur système est détectée. Par exemple
Exceptions - v1.1.1 6 / 17
Gestion des exceptions
class ClasseAbstraite(object):
def m1():
raise NotImplementedError("Classe abstraite")
def m2():
m1()
class ClasseConcrete(ClasseAbstraite):
def m1():
pass
Exceptions - v1.1.1 7 / 17
Gestion des exceptions
try...except
la suite d’instructions susceptible de lever une exception, que l’on
veut capturée, est :
précédée de l’instruction try:
suivie d’au moins une clause except: suivie de la classe (ou d’un
tuple de classes) de l’exception devant être attrapée avec possibilité
de récupérer l’argument de l’exception (mot clé as)
une clause else: peut suivre toutes les clauses except:, elle est
exécutée lorsque qu’une exception n’a pas été attrapée par les clauses
except: précédentes (il ne peut pas y avoir de clause except après
un else)
une clause finally: peut terminer l’instruction try. Son code est
toujours exécuté (qu’il y ait eu une exception ou pas).
Exceptions - v1.1.1 8 / 17
Gestion des exceptions
Exception
Pour créer un type d’exception il faut créer une sous classe (ou
sous-sous classe) de la classe Exception (importé par défaut en
python 3)
On peut la configurer comme toute classe (redéfinir init ,
ajouter des attributs, ajouter des méthodes) mais elles sont souvent
très simples (voire vides, utilisation de pass)
La bonne pratique veut que le nom d’une exception se termine par
Error (ou Erreur si codage en français).
Exceptions - v1.1.1 9 / 17
Gestion des exceptions
Exemple : polyligne.py 1 / 4
Règle
On interdit qu’une polyligne possède deux fois le même point
Définition de l’exception
class MemePointInterditErreur(Exception):
pass
Redéfinition de init
def __init__(self, est_ferme, pt1, pt2, *args):
if pt1 == pt2:
raise MemePointInterditErreur("pt1 et pt2 doivent e
^tre différents")
self._est_ferme = est_ferme
self._points = [pt1, pt2]
for pt in args:
self.ajouter(pt)
Exceptions - v1.1.1 10 / 17
Gestion des exceptions
Exemple : polyligne.py 2 / 4
Exceptions - v1.1.1 11 / 17
Gestion des exceptions
Exemple : polyligne.py 3 / 4
Exceptions - v1.1.1 12 / 17
Gestion des exceptions
Exemple : polyligne.py 4 / 4
In [4]: p.ajouter(Point2D(1,2))
---------------------------------------------------------------------------
MemePointInterditErreur Traceback (most recent call last)
<ipython-input-4-ba83f09397ce> in <module>()
----> 1 p.ajouter(Point2D(1,2))
...
MemePointInterditErreur: Point2D(1,2) appartient déja à la polyligne
In [5]: p[0:2]=[Point2D(0,0), Point2D(1,2)]
In [6]: p
Out[6]: Polyligne(True, Point2D(0,0), Point2D(1,2), Point2D(2,6))
In [7]: p[0]=Point2D(1,2)
---------------------------------------------------------------------------
MemePointInterditErreur Traceback (most recent call last)
<ipython-input-7-6ead6740695c> in <module>()
...
MemePointInterditErreur: Point2D(1,2) appartient déja à la polyligne
Exceptions - v1.1.1 13 / 17
with
Instruction with 1 / 4
Exceptions - v1.1.1 14 / 17
with
Instruction with 2 / 4
f = open("myfile.txt")
try:
for line in f:
print (line, end="")
except Exception:
pass
finally :
f.close()
Exceptions - v1.1.1 15 / 17
with
Instruction with 3 / 4
with. . .as
utilisation d’une fonction ou d’une classe (context manager ) qui :
possède et exécute I1
retourne l’objet o afin de pouvoir exécuter la liste des instruction I2
possède et exécute automatiquement I3 une fois les instructions I2
entièrement exécutées ou arrêtées par une exception
syntaxe :
with appel_fonction() as o:
I2
https://www.afpy.org/doc/python/3.5/tutorial/errors.html
with open("myfile.txt") as f:
for line in f:
print (line, end="")
Exceptions - v1.1.1 16 / 17
with
Instruction with 4 / 4
Exceptions - v1.1.1 17 / 17