Université des Sciences et Technologies de Lille
Licence Miage - Programmation 1



Cours 5 : les exceptions


Une exception est une situation inhabituelle, qui ne s'accorde pas avec le cas général prévu par le programme, la procédure ...et qui demande donc une gestion spécifique. L'avantage du mécanisme d'exception est qu'il permet un traitement uniforme des erreurs au sein du programme ADA.

Exceptions prédéfinies

CONSTRAINT_ERROR : activée quand on ne respecte pas une contrainte d'intervalle, de tableau ...

STORAGE_ERROR : problème de mémoire

PROGRAM_ERROR : activée quand on appelle un sous-programme inexistant, quand l'appel à une fonction se termine sans résultat retourné (return)...

NUMERIC_ERROR : activée quand une variable numérique est trop grande ...

TASKING_ERROR : quand on a un problème avec une tâche. eh eh.
Il y également des exceptions prédéfinies liées aux entrées-sorties

ADA.IO_EXCEPTIONS.DATA_ERROR: activée si la valeur lue avec un get ne correspond pas au format attendu.
N : Natural;
get(N);
      --   A -> raised ADA.IO_EXCEPTIONS.DATA_ERROR
      --  -2 -> raised CONSTRAINT_ERROR
Une exception, lorsqu'elle est déclenchée, se propage à travers tous les niveaux du programme. Elle interromp l'exécution des blocs qu'elle traverse tant qu'elle n'est désactivée en étant capturée.

Que faire avec une exception : activation / capture

On peut la déclencher, ou l'activer, manuellement : raise ... ; On peut ensuite la capturer, c'est-à-dire prévoir un traitement adéquat à la situation pathologique.


exception

when CONSTRAINT_ERROR  => put("il y a un probleme dans la fonction");
                         raise CONSTRAINT_ERROR;

La capture peut se faire à tous les niveaux de propagation de l'exception, mais toujours en fin d'un bloc d'exécution. Il faut noter que l'endroit où l'on choisit de capturer une exception n'est pas indifférent : on n'accède pas au même environnement à l'intérieur ou à l'extérieur d'une fonction, par exemple. Une fois capturée, une exception est désactivée.

Déclarer ses propres exceptions

Il est possible de définir une exception, de la même manière que l'on définit un type ou déclare une variable. Une exception utilisateur se manipule ensuite comme une exception prédéfinie.

   Erreur_syntaxe : Exception;