Vous êtes sur la page 1sur 40

Programmation orientée objet (POO)

Gestion des expceptions

Chapitre 5
POO/Gestion des exceptions

2eme Année API


Texte
Texte
Texte
saadi mo@yahoo.fr

6 novembre 2022

ENSA-K, Khouribga 2022-2023 1/ 38


Programmation orientée objet (POO)
Gestion des expceptions

Plan
1 Programmation orientée objet (POO)
Introduction
Notion de classe
Attributs & Constructeur
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode
2 Gestion des expceptions
Introduction
Qu’est ce qu’une exception ?
Traitement des exceptions
Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions
ENSA-K, Khouribga 2022-2023 2/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Plan
1 Programmation orientée objet (POO)
Introduction
Notion de classe
Attributs & Constructeur
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode
2 Gestion des expceptions
Introduction
Qu’est ce qu’une exception ?
Traitement des exceptions
Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions
ENSA-K, Khouribga 2022-2023 3/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Introduction
La programmation orientée objet (POO), ou programmation par objet, est un
paradigme de programmation informatique élaboré par les Norvégiens Ole-Johan
Dahl et Kristen Nygaard au début des années 1960 et poursuivi par les travaux
d’Alan Kay dans les années 1970.
Il consiste en la définition et l’interaction de briques logicielles appelées objets ;
un objet représente un concept, une idée ou toute entité du monde physique,
comme une voiture, une personne ou encore une page d’un livre.
Un objet possède une structure interne et un comportement, et il sait interagir
avec ses pairs. Il s’agit donc de représenter ces objets et leurs relations
l’interaction entre les objets via leurs relations permet de concevoir et réaliser les
fonctionnalités attendues, de mieux résoudre le ou les problèmes.
Python est un langage de programmation orientée objets.
Les objets sont omniprésents en Python, string, int, float,list ...(qui sont alors
dits natifs, c’est à dire par défaut dans Python), mais est qu’on peut créer des
objets personalisés selon nos besoin ?

ENSA-K, Khouribga 2022-2023 4/ 38


Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Classe : Qu’est ce que c’est ?


Une classe représente un type personnalisé et complexe.
Une classe est un ensemble d’objets qui partagent les mêmes propriétés
(attributs) et les mêmes fonctions (méthodes).
Les fonctions qui agissent sur les objets d’une classe sont appelées méthodes.

classe = Attributs + methodes

On a déjà rencontré des classes qui sont déjà programmées dans Python :
- Les listes qui ont par exemple pour méthodes : pop, append, insert,
remove,...
- Les chaı̂nes de caractères qui ont pour méthodes : upper, isupper,lower,. .
Exemple

>>>s=”CPGE GSR”
>>>type(s)
<class ’str’> #s est un objet de la classe str
>>> s.isupper() #isupper() est une méthode de la classe str
True
ENSA-K, Khouribga 2022-2023 5/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Définition d’une classe

Pour définir une classe, on commence par l’utilisation du mot


clé class, suivie par le nom de la classe. L’usage est de donner
un nom qui commence par une majuscule.
Ensuite, on définit les attributs de la classe.
Enfin, on définit l’ensemble des méthodes qui agissent sur la
classe.
Parmi les méthodes on trouve le constructeur def init
(self,param)
Le mot-clé self désigne l’objet courant. Cet objet représente
l’instance courante de la classe elle-même.

ENSA-K, Khouribga 2022-2023 6/ 38


Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Définition d’une classe


Syntaxe en Python
class NomDeLaClasse :
##Défintion des attributs de la classe
Attr 1=Val 1
......
Attr N=Val N
##Définition des méthodes de la classe
#le constructeur est une méthode
def init (self,param) :
.................
def methode 1(self,para) :
.................
def methode N(self,param) :
.................

Remarque
Généralement, les attributs d’une classe sont définis dans le constructeur
init ()
ENSA-K, Khouribga 2022-2023 7/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Exemple d’une classe


class Point :
Tex def init (self,coordx,coordy) :
Textete self.x=coordx
Textete self.y=coordy
#Définition de la méthode distance
Tex def distance(self,pt) :
Textete dist=math.sqrt((self.x-pt.x)**2+(self.y-pt.y)**2)
Textete return dist
#Définition de la méthode affichePoint()
Tex def affichePoint(self) :
Textete print(”Point(”,self.x,”,”,self.y,”)”)

ENSA-K, Khouribga 2022-2023 8/ 38


Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Comment utiliser une classe ?


Création du premier objet de la classe point
>>> p1 = Point(1, 1)
Création du second objet de la classe point
>>>p2 = Point(2, 2)
Afficher les coordonnées du premier point p1
>>>p1.affichePoint()
Point( 1 , 1 )
Afficher les coordonnées du second point p2
>>>p2.affichePoint()
Point( 2 , 2 )
afficher la distance entre les deux points p1 et p2
>>>print(p1.distPoint(p2))
1.41
L’instruction type(p1) renvoie < class ′ Point ′ >
ENSA-K, Khouribga 2022-2023 9/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Les attributs de la classe


Les attributs d’une classe constituent les caractéristiques des objets générés à
partir de cette classe
Un attribut est caractérisé par :
• un nom
• une valeur obligatoire (qui désigne le type de l’attribut)
Les attributs d’un objet sont accessibles et modifiables après la construction de
l’objet.
Exemple
class Point :
Tex ””” Modélise les points d’un plan muni d’un repère ”””
Tex x=None # première composante
Tex y=None # deuxième composante
>>> P= Point () #Appel de constructeur init ()
>>> print(P.x)
None
>>> P.x=2
>>> P.y=3
>>> P.x+P.y
5
ENSA-K, Khouribga 2022-2023 10/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Les attributs d’instance


Les attributs d’instance sont définis après la construction d’un objet
ils peuvent différer d’un objet à l’autre d’une même classe.

Exemple
class Point :
Tex ””” Modélise les points d’un plan muni d’un repère ”””
Tex x=None # première composante
Tex y=None # deuxième composante

• x et y sont deux attributs de la classe point.


• Création d’un attribut d’instance >>> P1= Point ()
>>> P2= Point ()
>>> P1.couleur=”noire”#l’attribut couleur est un attribut d’instance
>>> P1.couleur
’noire’
>>>P2.couleur
Traceback (most recent call last) :
File ” < stdin > ”, line 1, in < module >
AttributeError : Point instance has no attribute ’couleur’
ENSA-K, Khouribga 2022-2023 11/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Le constructeur : à quoi sert ?


Exemple 2
class Cercle :
Tex def init (self,centre,rayon,couleur) :
Textete self.centre = centre # tuple
Textete self.rayon = rayon # int
Textete self.couleur = rayon # str
Dans cet exemple la méthode init () est explicite, elle possède 4 paramètres
(1 + 3), dont le premier doit se nommer self et représente l’objet en cours
d’initialisation.
>>> cr1=Cercle() #création d’un objet avec un constructeur sans paramètre.
Traceback (most recent call last) :
File ” < stdin > ”, line 1, in < module > TypeError : init () takes exactly 4
arguments (1 given)
(1 given) : représente l’objet courant self.
Pour résoudre ce problème on introduit les valeurs par défauts pour chaque
paramètre.
ENSA-K, Khouribga 2022-2023 12/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Le constructeur : à quoi sert ?


En Python, le constructeur porte toujours le même nom :
init ().
La méthode spéciale init () est obligatoire, pour construire
vos objets (instances).
Exemple
class Test :
Texte pass
L’instruction pass ne fait rien, mais intervient lorsqu’il faut
absolument une instruction !
Dans cet exemple la méthode init () est implicite.
>>> p=Test()
>>> p
< main Test instance at 0xb74c9b4c >
La classe Test est vide, car elle ne ne contient rien.
ENSA-K, Khouribga 2022-2023 13/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Le constructeur : à quoi sert ?


Exemple 2
class Cercle :
Tex def init (self,centre,rayon,couleur) :
Textete self.centre = centre # tuple
Textete self.rayon = rayon # int
Textete self.couleur = rayon # str
Dans cet exemple la méthode init () est explicite, elle possède 4 paramètres
(1 + 3), dont le premier doit se nommer self et représente l’objet en cours
d’initialisation.
>>> cr1=Cercle() #création d’un objet avec un constructeur sans paramètre.
Traceback (most recent call last) :
File ” < stdin > ”, line 1, in < module > TypeError : init () takes exactly 4
arguments (1 given)
(1 given) : représente l’objet courant self.
Pour résoudre ce problème on introduit les valeurs par défauts pour chaque
paramètre.
ENSA-K, Khouribga 2022-2023 14/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Le constructeur : à quoi sert ?


Exemple 3
class Cercle :
Tex def init (self,centre=(0,0),rayon=10.5,couleur=”noir”) :
Textete self.centre = centre # tuple
Textete self.rayon = rayon # int
Textete self.couleur = rayon # str
Dans cet exemple la méthode init () contient des valeurs initiales pour les
attributs.
Dans ce cas, on peut créer des objets avec un constructeur sans paramètre.
>>> C1=Cercle() #création d’un objet avec un constructeur sans paramètre.
>>> C
< main .Cercle instance at 0xb73ab76c >#l’adresse de l’objet dans la RAM
>>> C.centre
[0, 0]
>>> C.rayon
1.0
>>> C.couleur
’red’
Créer l’objet cercle définit par Centre=(2,2) , rayon=5 et couleur=”rouge”
>>> C1=Cercle((2,2),5,“rouge”) ENSA-K, Khouribga 2022-2023 15/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Les méthodes de la classe


Les méthodes ou les opérations d’une classe décrivent le comportement des
objets générées à partir de cette classe.
Les méthodes assurent l’interaction entre les différents objets à travers l’échange
de messages
Une méthode représente une fonction qui permet de réaliser une ou plusieurs
tâches
Pour définir une méthode, il faut :
• indiquer son nom.
• indiquer les arguments entre des parenthèses. Le premier argument d’une
méthode doit être self.
Exemple

class Point :
Tex ””” Modélise les points d’un plan muni d’un repère ”””
Tex x=None # première composante
Tex y=None # deuxième composante
Tex #Défintion de la méthode initialise()
Tex def initialise (self ,a,b) :
TexText self.x=a
TexText self.y=b
ENSA-K, Khouribga 2022-2023 16/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Les méthodes de la classe


Comment utiliser une méthode ?
Pour accéder aux méthodes d’un objet, on indique :
1 le nom de la variable qui fait référence à cet objet
2 un point
3 le nom de la méthode

Code Python
class Point :
Tex x=None # première composante
Tex y=None # deuxième composante
Tex def initialise (self ,a,b) :
TexText self.x=a
TexText self.y=b
Tex def affichePoint(self) :
Textete print(”Point(”,self.x,”,”,self.y,”)”)
a.initialise(3, 5)
a.affiche()
Résultat du programme :Point(3,5) ENSA-K, Khouribga 2022-2023 17/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

Les méthodes statiques


On peut également définir des méthodes statiques. Elles sont assez proches des
méthodes de classe sauf qu’elles ne prennent aucun paramètre même self.
Elles travaillent donc indépendemment de toute donnée, aussi bien contenue
dans l’instance de l’objet que dans la classe.
Voici la syntaxe permettant de créer une méthode statique.
class Test :
Tex ”””Une classe de test tout simplement”””
Tex def afficher() :
TextText ”””Fonction chargee d’afficher quelque chose”””
TexText print(”On affiche la meme chose.”)
TexText print(”peu importe les donnees de l’objet ou de la classe.”)
On peut appeler une méthode statique depuis la classe ou l’objet
>>>Test.afficher()
On affiche la meme chose.
peu importe les donnees de l’objet ou de la classe.
>>>t=Test()
>>> t.afficher()
On affiche la meme chose.
peu importe les donnees de l’objet ou de la classe.
ENSA-K, Khouribga 2022-2023 18/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

L’héritage
Définition
Dans la programmation orientée objet (que ce soit en Python, C++, Java, ...),
le concept d’héritage est une technique très puissante et extrêmement pratique.
Dans l’héritage on parle de :
• une classe de base (classe mère)
• Une classe dérivée (classe fille)
Le concept de l’héritage permet de créer une nouvelle classe (classe dérivée) à
partir d’une classe existante (classe mère).
• La classe dérivée contient tous les éléments de la classe mère (attributs et
méthodes) sauf ses constructeurs.
• La classe dérivée peut posséder autres éléments : attributs et méthodes.
• La classe dérivée peut redéfinir des méthodes de la classe mère.

Syntaxe pour créer une classe Dérivée


class NomDeLaClasseFille(NomDeLaClasseMere) :
# Défintion des attributs spécifiques à la classe Fille
# Défintion des méthodes spécifiques à la classe Fille
ENSA-K, Khouribga 2022-2023 19/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

L’héritage
Exemple
Résultat
##Créaction de la classe mère Point
Je suis : Point(2,3,)
class Point :
Ma couleur est Rouge
Tex x=None # première composante
Tex
Tex y=None # deuxième composante
Tex
Tex def initialise (self ,a,b) :
Tex
TexText self.x=a
Tex
TexText self.y=b
Tex
Tex def affichePoint(self) :
Tex
Textete return(”Point(”,self.x,”,”,self.y,”)”)
Tex
##Créaction de la classe fille PointCouleur
Tex
class PointCouleur(Point) :
Tex
Tex couleur=”Rouge” # un nouveau attribut
Tex
Tex def info(self) :
Tex
TexText print (” Je suis :”,self.affichePoint())
Tex
TexText print(”Ma couleur est”,self.couleur)
Tex
##Programme principal
Tex
P= PointCouleur()
Tex
P. initialise (2 ,3)
Tex 2022-2023
ENSA-K, Khouribga 20/ 38
P.info ()
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

L’héritage
La classe object
Par défaut, toutes les classes sont descendantes de la classe object et ainsi tous les
objets que l’on crée en Python possèdent les attributs et méthodes de cette classe.

Exemple
>>> issubclass (int, object )
True
>>> issubclass (list , object )
True
>>> issubclass(int,list)
False
>>> issubclass (Point , object )
True
>>> issubclass (PointCouleur , Point )
True
>>> dir( object )
[’ class ’, ’ delattr ’, ’ doc ’, ’ format ’, ’ getattribute ’, ’ hash ’,
’ init ’, ’ new ’, ’ reduce ’, ’ reduce ex ’, ’ repr ’, ’ setattr ’,
’ sizeof ’, ’ str ’, ’ subclasshook ’]
ENSA-K, Khouribga 2022-2023 21/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

L’héritage
La fonction isinstance
Si x est une instance d’une sous-classe B de A, la fonction isinstance(x,B) ou
isinstance(x,A) renvoie True

Exemple
>>> type(5)
< class ′ int ′ >
>>> isinstance(5, int)
True
>>>L=[1,3,10,-6]
>>> type(L)
< class ′ list ′ >
>>> isinstance(L, list)
True
>>> isinstance(L, tuple)
Flase
>>> isinstance(L, object)
True
ENSA-K, Khouribga 2022-2023 22/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

La surchage d’une méthode

Définition
La surchage (redéfinition) d’une méthode est le fait de réécrire
dans une classe B une méthode d’une des classes dont B
hérite.
Lorsque cette méthode sera appelée sur un objet de type B,
alors c’est la méthode redéfinie qui sera utilisée et non la
méthode de la classe mère.
Syntaxe pour créer une classe Dérivée

class NomDeLaClasseFille(NomDeLaClasseMere) :
# Défintion des attributs spécifiques à la classe Fille
# Défintion des méthodes spécifiques à la classe Fille

ENSA-K, Khouribga 2022-2023 23/ 38


Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

La surchage des Méthodes spéciales


Les méthodes spéciales commencent et finissent par (deux underscores ’ ’).
Elles sont héritées de la classe object.
Les principales méthodes que l’on peut surcharger pour une classe donnée sont :
Méthode de la classe à surcharger utilisation
object. add (self, other) self+other
object. sub (self, other) self-other
object. mul (self, other) self*other
object. div (self, other) self/other
object. floordiv (self, other) self//other
object. ne (self, other) self+other
object. le (self, other) self-other
object. lt (self, other) self*other
object. ge (self, other) self/other
object. gt (self, other) self//other
object. and (self, other) self and other
object. or (self, other) self or other
object. str () print(self) ;str(z)
object. repr () repr(self)
object. len (self) len(self)
ENSA-K, Khouribga 2022-2023 24/ 38
Introduction
Notion de classe
Programmation orientée objet (POO)
Attributs & Constructeur
Gestion des expceptions
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode

La surchage des méthodes spéciales


Exemple
Résultat
class Vecteur :
Vector (2, 10)
Tex def init (self, a, b) :
Vector (5, -2)
TexText self.x=a
Vector (7, 8)
TexText self.y=b
Vector (10, -20)
Tex def str (self) : :
Tex
Textete return(”Vecteur(”,self.a,”,”,self.b,”)”)
Tex
Tex def add (self,other) :
Tex
TexText return Vecteur(self.a + other.a, self.b + other.b)
Tex
Tex def mul (self,other) :
Tex
TexText return Vecteur(self.a * other.a, self.b * other.b)
Tex
##Programme principal
Tex
v1 = Vecteur(2,10)
Tex
v2 = Vecteur(5,-2)
Tex
v3=v1+v2
Tex
v4=v1*v2
Tex
print(v1)
Tex
print(v2)
Tex
print(v3)
print(v4) ENSA-K, KhouribgaTex
2022-2023 25/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Plan
1 Programmation orientée objet (POO)
Introduction
Notion de classe
Attributs & Constructeur
Méthodes de classe /Méthodes statiques
L’héritage et la surchage de méthode
2 Gestion des expceptions
Introduction
Qu’est ce qu’une exception ?
Traitement des exceptions
Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions
ENSA-K, Khouribga 2022-2023 26/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Introduction
Les erreurs de syntaxe
Jusqu’à maintenant, les messages d’erreurs qu’on a rencontré sont le plus
souvent les erreurs de syntaxe
• manque deux points (’ :’)
• L’indentation n’est pas réspectée
Les erreurs de syntaxe sont mentionnés par l’intepréteur python,

Exemple
>>> for i in range(1,10)
Tex File ”<stdin>”, line 1
TexTE for i in range(1,10)
TexTESTTETSTETSTT ˆ
SyntaxError : invalid syntax
• L’analyseur répère la ligne contenant l’erreur et affiche une petite ‘flèche’
pointant vers le premier endroit de la ligne où l’erreur a été détectée
• L’erreur est causée (ou, au moins, a été détectée comme telle) par le symbole
placé avant la flèche, ici car il manque deux points (’ :’) avant lui,
ENSA-K, Khouribga 2022-2023 27/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Introduction
En pyhton, même si une instruction ou une expression est syntaxiquement
correcte, elle peut générer une erreur lors de son exécution.
Ce genre d’erreurs sont dues à la mauvaise gestion des cas particuliers comme :

En fait, ces erreurs portent le nom d’exceptions.

ENSA-K, Khouribga 2022-2023 28/ 38


Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Qu’est ce qu’une exception ?


Définition
Les exceptions sont les opérations qu’effectue un interpréteur lorsqu’une erreur
est détectée au cours de l’exécution d’un programme.
En règle générale, l’exécution du programme est alors interrompue, et un
message d’erreur plus ou moins explicite est affiché

Exemple

>>> print(55/0)
Traceback (most recent call last) :
File ”<stdin>”, line 1, in <module>
ZeroDivisionError : int division or modulo by zero
Le message d’erreur proprement dit comporte deux parties séparées par un
double point : d’abord le type d’erreur, et ensuite une information spécifique de
cette erreur.

⇒Question : Comment peut-on gérer ces cas exceptionnels et


reprendre la main pour proposer un traitement exceptionnel ?
ENSA-K, Khouribga 2022-2023 29/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions


Considérons un programme ”divsion.py” qui permet de :
• Saisir au clavier deux entiers a et b
• Faire appel à une fonction qui permet de retourner le quotient a/b.
• Affiche le résultat
Code python
######Défintion de la fonction calcul()
def calcul(a,b) :
Tex y=a/b
Tex return y
######Programme principal
a=int(input(”Donner a :”))
b=int(input(”Donner b :”))
resultat=calcul(a,b)
print(”le résultat=”,resultat)
ENSA-K, Khouribga 2022-2023 30/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions


⇒Exécution
Nous constatons que l’interpréteur python ne signale pas le cas ou b=0
Voyons ce qui se passe au moment de l’exécution dans les 2 scénarios suivants :
• Scénario 1 : Le cas normal
Donner a :12
Donner b :6
Resultat=2
• Scénario 2 : cas ou b=0
Donner a :12
Donner b :0
Traceback (most recent call last) :
File ”divsion.py”, line 6, in <module>
resultat=calcul(a,b)
File ”division.py”, line 2, in calcul
return a/b
ZeroDivisionError : int division or modulo by zero
Dans le scénario 2, Python a levé une exception de type ZeroDivisionError.
⇒Solution : pour remédier à ce problème, on introduit l’instruction if.
ENSA-K, Khouribga 2022-2023 31/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions : l’instruction if


⇒Code python de la solution 1
######Défintion de la fonction calcul()
def calcul(a,b) :
Tex return a/b
######Programme principal
a=int(input(”Donnez un entier a :”))
b=int(input(”Donnez un entier b :”))
if isinstance(a,int)==True :
Te if isinstance(b,int)==True :
TexTES if b !=0 :
TexTESTE resultat=calcul(a,b)
TexTESTE print(”le résultat est :”,resultat)
TexTES else :
TexTESTE print(”Division par zéro”)
Te else :
TexTES print(”type incompatible”)
else :
Te print(”type incompatible”)

ENSA-K, Khouribga 2022-2023 32/ 38


Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions : l’instruction if


⇒Critique de la solution 1
Dans cette solution nous avons réalisé de nombreux tests
avant d’écrire les instructions utiles du programme. Cette
situation a deux inconvénients majeurs :
• Le programmeur peut omettre de tester une condition ;
• Le code devient vite illisible car la partie utile est masquée par
les tests.
Python remédie à cela en introduisant un Mécanisme de
gestion des exceptions.
Grâce à ce mécanisme, on peut améliorer grandement la
lisibilité du code en séparant :
• le code utile
• de celui qui traite des situations exceptionnelles,

ENSA-K, Khouribga 2022-2023 33/ 38


Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions : try except


Pour traiter les exceptions, on doit utiliser le bloc try except
Le mécanisme s’effectue donc en deux phases :
• la levée d’exception lors de la détection d’erreur ;
• le traitement approprié.
⇒Code python de la solution 2
######Défintion de la fonction calcul()
def calcul(a,b) :
Tex return a/b
######Programme principal
a=int(input(”Donnez un entier a :”))
b=int(input(”Donnez un entier b :”))
resultat=0
try :
Tex resultat=calcul(a, b)
except ZeroDivisionError :
Tex print (”Division par zero” )
######la suite du programme
print(”Resultat=”,resultat)

ENSA-K, Khouribga 2022-2023 34/ 38


Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Traitement des exceptions : try except


⇒Exécution
Voyons ce qui se passe au moment de l’exécution dans les 2 scénarios suivants
après l’ajout du bloc try except :
• Scénario 1 : Le cas normal
Donner a :12
Donner b :6
Resultat=2
• Scénario 2 : cas ou b=0
Donner a :12
Donner b :0
Division par zero
Resultat=0
Reramque
Dans la solution 2, on a traité une seule exception, mais on peut capturer
d’autres exceptions comme :
• TypeError : lorsque a ou b ne sont pas des entiers
• NameError : l’une des variables a ou b n’a pas été définie
ENSA-K, Khouribga 2022-2023 35/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Le mot-clé else
Dans un bloc try, else va permettre d’exécuter une action si aucune erreur ne
survient dans le bloc.
Voici un petit exemple :
######Défintion de la fonction calcul()
def calcul(a,b) :
Tex y=a/b
Tex return y
######Programme principal
a=int(input(”Donnez un entier a :”))
b=int(input(”Donnez un entier b :”))
resultat=0
try :
Tex resultat=calcul(a, b)
except ZeroDivisionError :
Tex print (”Division par zero” )
except TypeError :
Tex print (”type incompatible avec la division .”)
else :
Tex print (”Le ré sultat obtenu est”, resultat )
ENSA-K, Khouribga 2022-2023 36/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Le mot-clé finally
finally permet d’exécuter du code après un bloc try, quelque soit les différents
scénarios.
Voici un petit exemple :
######Défintion de la fonction calcul()
def calcul(a,b) :
Tex y=a/b
Tex return y
######Programme principal
a=int(input(”Donnez un entier a :”))
b=int(input(”Donnez un entier b :”))
resultat=0
try :
Tex resultat=calcul(a, b)
except ZeroDivisionError :
Tex print (”Division par zero” )
except TypeError :
Tex print (”type incompatible avec la division .”)
finally :
Tex print (”Le résultat obtenu est”, resultat )
ENSA-K, Khouribga 2022-2023 37/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

L’instruction raise

Défintion : L’instruction raise permet de lever volontairement


une exception. On peut trouver l’instruction à tout endroit du
code, pas seulement dans un bloc try :
Sa syntaxe est la suivante :
raise TypeDeLException (” message à afficher ”)
Exemple
annee = input () # L’utilisateur saisit l’année
try :
Tex annee = int( annee ) # On tente de convertir l’année
Tex if annee <=0 :
TexTex raise ValueError (”l’année saisie est né gative ou nulle ”)
except ValueError :
Tex print (”La valeur saisie est invalide (l’année est peut-être négative ).”)

ENSA-K, Khouribga 2022-2023 38/ 38


Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Les assertions
Défintion : Les assertions sont un moyen simple de s’assurer, avant de
continuer, qu’une condition est respectée. En général, on les utilise dans des
blocs try ... except.
Sa syntaxe est la suivante :assert test
Si le test renvoie True, l’exécution se poursuit normalement. Sinon, une
exception AssertionError est levée.
Exemple
1 >>>var = 5
2 >>> assert var == 5
3 >>> assert var == 8
4 Traceback ( most recent call last ) :
5 File ” < stdin > ”, line 1, in <module>
6 AssertionError
Comme vous le voyez, la ligne 2 s’exécute sans problème et ne lève aucune
exception. On teste en effet si var == 5. C’est le cas, le test est donc vrai,
aucune exception n’est levée.
À la ligne suivante, cependant, le test est var == 8. Cette fois, le test est faux
et une exception du type AssertionError est levée.
ENSA-K, Khouribga 2022-2023 39/ 38
Introduction
Qu’est ce qu’une exception ?
Programmation orientée objet (POO) Traitement des exceptions
Gestion des expceptions Les mots clés else et Finally
L’instruction raise
Les assertions
Liste des exceptions

Liste des exceptions


Python possède beaucoup d’exceptions prédéfinies (cf
http ://docs.python.org/3.3/library/exceptions.html)
En voici juste quelques-unes :

Exception Description
IndexError se produit si on cherche à accéder à un élément
d’une liste, en dehors des limites de celle-ci.
NameError se produit quand on évoque une variable (locale
ou globale) dont le nom n’existe pas
SyntaxError se produit quand Python échoue à lire une ex-
pression dont la syntaxe est erronée
TypeError se produit quand une opération est appliquée à
un objet qui n’est pas du type adéquat
ValueError se produit quand la valeur saisie est de type
différent de celui attendu
ZeroDivisionError se produit quand un calcul arithmétique conduit
à une division par 0

ENSA-K, Khouribga 2022-2023 40/ 38

Vous aimerez peut-être aussi