Si une exception est levée et jamais traitée, cela se traduit
par l'arrêt complet de l'exécution et
par un message de diagnostic de l'environnement d'exécution
qui signale le nom de l'exception responsable de l'interruption.
Un traitement d'exceptions est une construction syntaxique
permettant de faire face à d'éventuelles lévées d'exceptions
dans une partie du programme. Dans le cas où elle existe,
cette construction doit toujours apparaître à la
fin d'un
bloc, après la dernière de ses instructions.
Exemple 1:
procedure division is
x,y : integer;
begin
put("Entrez un entier: "); get(x); -- 1
put("Entrez un entier: "); get(y);
put("Le resultat de la division de ");
put(x,2); put(" par "); put(y,2);
put(" est "); put(x/y);
exception
when Data_Error =>
put_line("Entree invalide. Au revoir");
end division;
Dans ce bloc, toute la partie entourée des mots-clés
begin et exception correspond aux
instructions du bloc;
toute la partie entourée par
exception et end est un traitement d'exceptions.
Ici, il sert à traiter
l'exception Data_Error
lorsqu'elle est lévée
par les intructions
du bloc.
Par exemple, si l'entrée fournie pour get(x),
n'est pas un entier,
get lève l'exception Data_error.
Le flot de contrôle est interrompu (au point marqué par - 1
dans le texte) et
inmédiatement transféré aux instructions
prevues à la fin du bloc pour traiter
cet exception . Dans notre exemple, il s'agit du
code à droite de => dans:
exception
when Data_Error =>
put_line("Entree invalide. Au revoir");
end division;
Ainsi, le code put_line("Entree invalide. Au revoir")
est exécuté, puis l'exécution du bloc fini.
Un traitement d'exceptions peut traiter plusieurs exceptions. Dans ce
cas, on prévoit plusieurs cas when avec le ou les noms
des exceptions à traiter, et une suite d'instructions à
exécuter dans chaque cas.
begin
B1;B2;B3; --- Instructions du bloc
exception
when E_1 => I1;
when E_2 => I2;
.....
when others => Im;
end;
Dans ce schéma, le cas when others permet de traiter
avec Im, toute exception
dont le nom n'apparaît dans aucun des cas précédents.