Redéclenchement d'exceptions

De RAD Studio
Aller à : navigation, rechercher

Remonter à Ecriture de gestionnaires d'exceptions


Parfois, quand vous gérez localement une exception, vous voulez étendre la gestion définie par le bloc conteneur et pas la remplacer. Mais, bien entendu, quand votre gestionnaire local en a fini avec l'exception, il détruit automatiquement l'instance d'exception et le gestionnaire du bloc conteneur ne peut donc pas agir dessus. Vous pouvez néanmoins empêcher le gestionnaire de détruire l'exception, ce qui laisse au gestionnaire du conteneur l'opportunité d'y répondre. Pour ce faire, utilisez la commande raise sans arguments. Cette opération est appelée redéclenchement de l'exception. L'exemple suivant illustre cette technique :

 try
 { statements }
   try
 { special statements }
   except
     on ESomething do
     begin
 { handling for only the special statements }
       raise;{ reraise the exception }
     end;
   end;
 except
   on ESomething do ...;{ handling you want in all cases }
 end;

Si le code de la partie instructions déclenche une exception ESomething, seul le gestionnaire du bloc de gestion d'exception extérieur s'exécute. Par contre, si c'est le code de la partie instructions spéciales qui déclenche une exception ESomething, la gestion définie dans le bloc de gestion d'exception intérieur est exécutée suivie par celle, plus générale, du bloc de gestion d'exception extérieur. En redéclenchant des exceptions, vous pouvez facilement définir une gestion spécifique d'exceptions pour des cas particuliers sans perdre (ou sans dupliquer) les gestionnaires existants.

Si le gestionnaire souhaite déclencher une autre exception, il peut utiliser l'instruction raise ou throw normalement, comme décrit dans Déclenchement d'une exception.

Voir aussi