ERREUR ET EXCEPTION
• Un bug est un fonctionnement non désiré dans un ordinateur
ou un programme informatique.
• On parle de bug quand le logiciel ne fait pas ce qu'on lui a
demandé, qu'il se bloque et ne répond plus ou qu'il plante.
• De par la nature complexe de l'informatique, il est assez
fréquent que vous rencontriez des bugs !
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 1
ERREUR ET EXCEPTION
• Une exception est un objet
qui contient des
informations sur le contexte
de l'erreur ;
• Lorsqu'une exception
survient et qu'elle n'est pas
traitée alors elle produit
une interruption du
programme et elle affiche
sur la sortie standard un
message ainsi que la pile
des appels.
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 2
ERREUR ET EXCEPTION
• Les erreurs de syntaxe
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 3
ERREUR ET EXCEPTION
• Exception
Même si une instruction ou une expression est syntaxiquement correcte, elle peut
générer une erreur lors de son exécution.
Les erreurs détectées durant l'exécution sont appelées des exceptions et ne sont pas
toujours fatales : nous apprendrons bientôt comment les traiter dans nos programmes.
La plupart des exceptions toutefois ne sont pas prises en charge par les programmes, ce
qui génère des messages d'erreurs.
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 4
ERREUR ET EXCEPTION
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 5
ERREUR ET EXCEPTION
• Gestion des exceptions
Il est possible d'écrire des programmes qui prennent en charge certaines exceptions.
def test():
while True:
try:
x = int(input("Please enter a number: "))
break
except ValueError:
print("That was no valid number. Try again...")
if __name__ == '__main__':
test()
Une instruction try peut comporter plusieurs clauses except pour permettre la prise en charge de
différentes exceptions. Mais un seul gestionnaire, au plus, sera exécuté.
Vous trouvez la liste des exceptions natives et leur signification dans Exceptions natives
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 6
ERREUR ET EXCEPTION
• Gestion des exceptions
Les gestionnaires d'exceptions n'interceptent pas que les exceptions qui sont levées
immédiatement dans leur clause try, mais aussi celles qui sont levées au sein de fonctions
appelées (parfois indirectement) dans la clause try.
def this_fails():
x = 1/0
try:
this_fails()
except ZeroDivisionError as err:
print('Exception:', err)
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 7
ERREUR ET EXCEPTION
• Déclencheur des exceptions
L'instruction raise permet au programmeur de déclencher une exception spécifique.
Si vous avez besoin de savoir si une exception a été levée mais que vous n'avez pas l’intention de
la gérer, une forme plus simple de l'instruction raise permet de propager l'exception.
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
raise
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 8
ERREUR ET EXCEPTION
• Chainage d’exception
Si une exception non gérée se produit à l'intérieur d'une section except, l'exception en cours de
traitement est jointe à l'exception non gérée et incluse dans le message d'erreur.
try:
open("[Link]")
except OSError:
raise RuntimeError("Impossible de gérer l'erreur.")
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 9
ERREUR ET EXCEPTION
• Chainage d’exception
Pour indiquer qu'une exception est la conséquence directe d'une autre,
l'instruction raise autorise une clause facultative from.
def func():
raise ConnectionError
try:
func()
except ConnectionError as exc:
raise RuntimeError('Echec pour ouverture database') from exc
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 10
ERREUR ET EXCEPTION
• Action de nettoyage
L'instruction try a une autre clause optionnelle qui est destinée à définir des actions de nettoyage
devant être exécutées dans certaines circonstances.
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("Division par zéro!")
else:
print("Le résultat est :", result)
finally:
print("Exécution de la clause finally")
divide(2, 1)
divide(2, 0)
divide("2", "1")
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 11
ERREUR ET EXCEPTION
• Enrichissement des exceptions avec des notes
Quand une exception est créée pour être levée, elle est généralement initialisée avec des
informations décrivant l'erreur qui s'est produite. Il existe des cas où il est utile d'ajouter des
informations après que l'exception a été interceptée.
try:
raise TypeError('bad type')
except Exception as e:
e.add_note('Add some information')
e.add_note('Add some more information')
raise
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 12
ERREUR ET EXCEPTION
• Conception de classe d’exception
class MonErreurPersonnalisee(Exception):
"""Classe d'exception personnalisée."""
def __init__(self, message):
[Link] = message
super().__init__([Link])
try:
raise MonErreurPersonnalisee("Ceci est un message d'erreur
personnalisé.")
except MonErreurPersonnalisee as e:
print(f"Erreur personnalisée attrapée : {e}")
finally:
print("Code dans la clause finally.")
Python, POO2, LGI3 - M. DIOUF (UIDT) 03/01/2025 13