MPSI - Lyc´ee Chrestien de Troyes
Info 5
Python et la gestion des erreurs ou exceptions
Python et la gestion des erreurs ou exceptions
Quand on d´efinit une variable dans le langage Python, il n’est pas utile de pr´eciser son type. En effet, pour chaque objet manipul´e,
le langage lui associe automatiquement une classe qu’on obtient avec la fonction type :
In : a=144//12; b=144/12; c=1+2j; type(a), type(b), type(c)
(int, float, complex)
Parmi les plus courantes, on peut distinguer :
•la classe des nombres entiers d´efinie comme class ’int’ pour integer
•la classe des nombres r´eels, dits `a virgule flottante d´efinie comme class ’float’ pour floating number
•la classe des nombres complexes d´efinie comme comme class ’complex’ pour complex
•la classe des chaˆınes de caract`eres d´efinie comme class ’str’ pour string
On fera donc tr`es attention `a la classe des objets manipul´es car ils ne poss`ederont pas les mˆemes propri´et´es. Pour un objet donn´e, et
donc une classe donn´ee, on pourra faire appel `a certaines fonctions particuli`eres plutˆot que d’autres : on parle parfois des m´ethodes
associ´ees. De toute fa¸con, si on ´evalue une fonction avec un objet qui n’est pas dans la bonne classe, l’interpr´eteur renverra un
message d’erreur :
In : 144//(1+2j)
TypeError Traceback (most recent call last)
TypeError : can’t take floor of complex number.
Dans le langage Python, on parle plutˆot d’exceptions et on distinguera ces diff´erents types d’erreurs :
type interpr´etation
NameError cette exception est lev´ee quand la variable n’a pas ´et´e trouv´ee
TypeError cette exception est lev´ee quand une fonction ou une op´eration est appliqu´ee `a un argument du mauvais type
ZeroDivisionError cette exception est lev´ee quand il y a une division par z´ero
IndexError cette exception est lev´ee quand les indices appel´es ne correspondent pas `a la taille de la liste
ImportError cette exception est lev´ee quand les fonctions import´ees n’ont pas ´et´e trouv´ees
OverflowError cette exception est lev´ee quand un calcul sur les nombres r´eels est trop important pour ˆetre renvoy´e
D’ailleurs, on peut tout `a fait forcer l’interpr´eteur `a lever une exception grˆace `a la commande raise, et ceci en ajoutant un commentaire
ad´equat. Par exemple, pour calculer les images par la fonction f:x7→ x2
x−1, on pourra ´ecrire :
def f(x):
if x!=1: # on teste s’il s’agit d’une valeur interdite
return x**2/(x-1)
else:
raise ZeroDivisionError(’attention au domaine de d´efinition’)
Application 1 - Calcul des coefficients binomiaux
Soit n∈N, alors pour tout k∈J0, nK, on d´efinit le coefficient binomial n
kpar :
n
k=n!
k!(n−k)!
1. Dans le langage Python, construire la fonction f acto qui pour tout entier naturel ndonn´e, renvoie la valeur de n!. On ajoutera
un test conditionnel sur le param`etre nde sorte qu’une exception soit lev´ee si n6∈ N.
2. En d´eduire la fonction coefbinom qui pour tout entier ndonn´e, renvoie la liste des coefficients binomiaux n
kpour kallant de 0
`a n.
Application 2 - R´esolution d’une ´equation du second degr´e
On consid`ere le polynˆome P(x) = ax2+bx +c.
1. Construire la fonction solveR qui pour tout triplet (a, b, c)∈R3donn´e, renvoie les racines r´eelles du polynˆome Pdonn´e. On
ajoutera un test conditionnel sur le param`etre aafin de v´erifier qu’il s’agit bien d’un polynˆome du second degr´e.
2. En important le module cmath, construire la fonction solveC qui pour tout triplet (a, b, c)∈C3donn´e, renvoie les racines
´eventuellement complexes du polynˆome Pdonn´e. On ajoutera un test conditionnel sur le param`etre aafin de v´erifier qu’il s’agit
bien d’un polynˆome du second degr´e.
1