Python et la gestion des erreurs ou exceptions Quand on définit une

publicité
Info 5
Python et la gestion des erreurs ou exceptions
MPSI - Lycée Chrestien de Troyes
Python et la gestion des erreurs ou exceptions
Quand on définit une variable dans le langage Python, il n’est pas utile de préciser son type. En effet, pour chaque objet manipulé,
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éfinie comme class ’int’ pour integer
• la classe des nombres réels, dits à virgule flottante définie comme class ’float’ pour floating number
• la classe des nombres complexes définie comme comme class ’complex’ pour complex
• la classe des chaı̂nes de caractères définie comme class ’str’ pour string
On fera donc très attention à la classe des objets manipulés car ils ne possèderont pas les mêmes propriétés. Pour un objet donné, et
donc une classe donnée, on pourra faire appel à certaines fonctions particulières plutôt que d’autres : on parle parfois des méthodes
associées. De toute façon, si on évalue une fonction avec un objet qui n’est pas dans la bonne classe, l’interpréteur 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ôt d’exceptions et on distinguera ces différents types d’erreurs :
type
NameError
TypeError
ZeroDivisionError
IndexError
ImportError
OverflowError
interprétation
cette exception est levée quand la variable n’a pas été trouvée
cette exception est levée quand une fonction ou une opération est appliquée à un argument du mauvais type
cette exception est levée quand il y a une division par zéro
cette exception est levée quand les indices appelés ne correspondent pas à la taille de la liste
cette exception est levée quand les fonctions importées n’ont pas été trouvées
cette exception est levée quand un calcul sur les nombres réels est trop important pour être renvoyé
D’ailleurs, on peut tout à fait forcer l’interpréteur à lever une exception grâce à la commande raise, et ceci en ajoutant un commentaire
x2
adéquat. Par exemple, pour calculer les images par la fonction f : x 7→ x−1
, on pourra écrire :
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éfinition’)
Application 1 - Calcul des coefficients binomiaux
Soit n ∈ N, alors pour tout k ∈ J0, nK, on définit le coefficient binomial
n
k
=
n
k
par :
n!
k!(n − k)!
1. Dans le langage Python, construire la fonction f acto qui pour tout entier naturel n donné, renvoie la valeur de n!. On ajoutera
un test conditionnel sur le paramètre n de sorte qu’une exception soit levée si n 6∈ N.
2. En déduire la fonction coef binom qui pour tout entier n donné, renvoie la liste des coefficients binomiaux n
pour k allant de 0
k
à n.
Application 2 - Résolution d’une équation du second degré
On considère le polynôme P (x) = ax2 + bx + c.
1. Construire la fonction solveR qui pour tout triplet (a, b, c) ∈ R3 donné, renvoie les racines réelles du polynôme P donné. On
ajoutera un test conditionnel sur le paramètre a afin de vérifier qu’il s’agit bien d’un polynôme du second degré.
2. En important le module cmath, construire la fonction solveC qui pour tout triplet (a, b, c) ∈ C3 donné, renvoie les racines
éventuellement complexes du polynôme P donné. On ajoutera un test conditionnel sur le paramètre a afin de vérifier qu’il s’agit
bien d’un polynôme du second degré.
1
Téléchargement