Python Exception Handling

Programming (Python) · notes

Voir tous les documents en programmation

PYTHON Enseignante: Mme Lamia MANSOURI

1

3

Comment fonctionne try()? ▪ La première clause try est exécutée, c'est-à-dire le code entre try et except clause. ▪ S'il n'y a pas d'exception, alors seule la clause try sera exécutée. ▪ Si une exception survient, la clause try sera ignorée et la clause except sera exécutée. ▪ Si une exception se produit, mais que la clause except ne la gère pas, elle est transmise aux instructions try externes. ▪ Si l'exception n'est pas gérée, l'exécution s'arrête. ▪ Une instruction try peut avoir plus d'une clause except

5

On récupère donc l'objet de type Exception dans la variable e . Dans le bloc except, on affiche son type et sa valeur.

Voici deux exemples d'exécution :

  • si on ne fournit pas un nombre entier, il ne pourra être converti en int et une erreur de type ValueError se produit :

a : trois invalid literal for int() with base 10: 'trois’

  • si on fournit une valeur de 0 pour b, on aura une division par zéro qui produit une erreur de type ZeroDivisionError :

a : 5 b : 0 division by zero

Publicité

Le 1er bloc except capture donc les erreurs de type ValueError et ZeroDivisionError . L'exception capturée est stockée dans la variable e que l'on affiche pour avoir des informations sur la cause de l'erreur apparue.

Exemple d’exécution du programme :

a : 2 b : 0 Erreur de calcul : division by zero

La gestion des exception complète est try-except-finally. Le bloc finally est toujours exécuté, que l'exception se produise ou non dans le bloc try .

Méthode 3

def inverse(x):

if x == 0:

raise y = 1.0 / x return y

try:

print(inverse(0)) # erreur except :

print("erreur, message :")

Publicité

def inverse(x): if x == 0:

raise ValueError y = 1.0 / x return y

try:

print(inverse(0)) # erreur except ValueError:

print("erreur de type ValueError")

Le programme appelle la fonction compute qui, ellemême, appelle la fonction fun . Cette dernière produisant une erreur à cause de la division par zéro.

Dans ce cas, l'erreur qui est générée dans la fonction fun va juste se propager dans la fonction compute où elle sera arrêtée par l'instruction try-except .

def inverse(x):

y = 1.0 / x return y

try:

try:

Publicité

print(inverse(0)) # division par zéro --> ZeroDivisionError print(inverse s (0)) # fonc. inexistante --> exception NameError except NameError:

print("appel à une fonction non définie") except ZeroDivisionError as exc:

print("erreur", exc)

erreur float division by zero

def division(a, b):

try:

d = a//b except ArithmeticError:

print("Erreur")

T = [1, 2, 3] try:

print(T[4]) except LookupError:

print("Indice est supérieur à la taille du tableau")

Publicité

class Personne:

def init(self, nom):

self.nom = nom

try:

p = Personne(" ahmed") print(p.prenom) except AttributeError:

print("Erreur d'attribut")

chaîne de caractères contenant aussi autre chose que des chiffres

: 123a