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.