Sans refaire toute l’histoire des paradigmes des langages de programmation, il est tout de même intéressant de rappeller que :
Ouvrir une console Python et taper les instructions suivantes :
1/0
[][0]
Essayer de déclencher (ou lever) un maximum d’exceptions parmis celles listées ici. Vous copierez la liste en ajoutant l’instruction correspondante à droite de chaque exception.
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError 1/0
...
Essayer aussi les instructions :
raise Exception
raise Exception()
raise int
Dans les langages orientés objets, les exceptions sont bien sûr des objets. La structure hiérarchique des exceptions permet de grandes finesses lors de leur récupération.
Les exceptions représentent le plus souvent un problème que le programme a rencontré à l’exécution (le compilateur a compilé sans rien détecter d’anormal, ou nous avons affaire à un langage de script). Et le SGE permet au programmeur d’aider son programme à s’en tirer tout seul.
Le programme que nous allons étudier propose une utilisation détournée du SGE, puisque le flot du programme est dirigé par les exceptions.
Notons que par soucis de simplification, nous avons gardé quelques if
. Il
aurait été en effet possible de remplacer les if
par un système utilisant
assertEqual
et ses camarades.
Dans les langages orientés objets, les exceptions sont bien sûr des objets.
Un programme peut créer ses propres types d’exception et les placer judicieusement dans la hiérarchie existante.
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- PlusOuMoinsException
| +-- StopException
| +-- BravoException
| +-- TropException
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
Le plus souvent, les langages utilisent les instructions try
et catch
.
En Python, c’est try
et except
(voir la documentation
officielle).
try
et catch
peuvent ressembler à switch
et case
, mais le case
peut
avoir lieu plus haut dans les appels.
raise
permet de déclencher une exception existant dans le langage ou une
exception propre au programme.
Où est gérée l’exception TropException
?
Les instructions après le finally
seront toujours exécutées. Toujours ?
C’est en général ici que l’on ferme des fichiers, des connexions…