4. Le mécanisme d'exceptions

Le mécanisme d'exception permet de gérer des exécutions exceptionnelles qui ne se produisent qu'en cas d'erreur.

Il permet au programme de « rattraper » les erreurs, de détecter qu'une erreur s'est produite et d'agir en conséquence afin que le programme ne s'arrête pas.

Exemple

Si l'on souhaite exécuter le programme suivant :

1
for i in range(-10,11):
2
    1./i
3
    print("%.3f " %(1./i))
4

Le programme s'exécute jusqu'à i=0 puis le message d'erreur suivant s'affiche et l'exécution s'interrompt :

1
Traceback (most recent call last):
2
  File "<string>", line 250, in run_nodebug
3
  File "D:\Boulot\CoursPython\TP_NSI\assert3.py", line 4, 
4
  in <module>
5
    1./i
6
ZeroDivisionError: float division by zero
7

Une des solutions pour poursuivre l'exécution du programme jusqu'à la fin est d'utiliser l'instruction try-except

FondamentalL'instruction try - except

Avec l'instruction try-except, le programme s'exécute normalement lorsqu'il n'y a pas d'exception et informe l'utilisateur de l'erreur par un message approprié écrit par le programmeur prévoyant que vous êtes.

Exemple

Le programme de l'exemple précédent doit être réécrit comme suit :

1
for i in range(-10,11):
2
    try:
3
        1./i
4
    except ZeroDivisionError:
5
        print("  c'est une division par zéro  ")
6
    else:
7
        print("%.3f " %(1./i))
8

Ici, le programme s'exécute normalement lorsqu'il n'y a pas d'exception et informe l'utilisateur de l'erreur par le message « c'est une division par zéro » lorsqu'il y a une exception de type « ZeroDivisionError » (division par zéro).

MéthodeExercice : anticipation des erreurs avec try :... except ...

Ecrire une fonction lireEntier(), intégrant l'instruction try-except,

  • qui permet de saisir et d'afficher un nombre entier,

  • mais qui lors de toutes autres saisies (flottant, caractère, symbole, chaîne de caractères, ...)

    • affiche la saisie

    • puis invite l'utilisateur à en faire une nouvelle.

Saisir et tester le programme dans votre environnement de développement python.

1
def lireEntier():
2
    while True:  # 
3
4
5
6
lireEntier()