Section courante

A propos

Section administrative du site

Les instructions d'exceptions en Delphi sont au nombre de quatre et sont un ajout au Pascal d'origine :

TRY ... EXCEPT ... END

L'instruction «TRY» de Delphi permet d'effectuer la gestion d'une erreur aussi simplement qu'en Java par exemple. On encapsule les instructions à risque entre les mots réservés «TRY» et «EXCEPT», puis on met le traitement d'erreur entre les mots réservés «EXCEPT» et «END». Voici donc sa syntaxe :

TRY
 instructionarisque
EXCEPT
 instruction_exécuté_si_exception
END

ON ... DO

Il est pratique de pouvoir effectuer l'interception d'erreur, toutefois il peut arriver que plusieurs situation d'erreur se produise, de se fait, il est essentiel de pouvoir identifier, de laquelle il s'agit. Delphi, à la manière des vieux interpréteurs Basic comme BASICA et GWBASIC permet d'effectuer une branchement sur les instructions souhaité. Voici enfin sa syntaxe situer dans la zone de traitement d'exception :

TRY
 instructionarisque
EXCEPT
 ON codeerreur1 DO instructionexception1;
 ON codeerreur2 DO instructionexception2;
 ...
END

On peut également rajouter une instruction d'exception exécuté par défaut au cas où aucun des codes d'erreurs n'est rencontré, on utilisera dans ce cas l'instruction «ELSE» :

TRY
 instructionarisque
EXCEPT
 ON codeerreur1 DO instructionexception1;
 ON codeerreur2 DO instructionexception2;
 ...
ELSE
 instructionexceptionpardefaut;
END

TRY ... FINALLY ... END

Le déclenchement d'exception est parfois dangereux lorsqu'on pense au fait qu'on peut gaspiller des ressources mémoire ou oublier d'arrêter un périphérique par exemple. Il existe une instruction permettant de s'assurer que quoi qu'il arrive un bloc d'instruction sera exécuté même si des problèmes auront lieu. Cette instruction c'est «TRY» et «FINALLY». Contrairement aux instructions «TRY EXCEPT» s'exécutant que si une exception à lieu, le zone «FINALLY» est assurément exécuté! Voici donc sa syntaxe :

TRY
 instructionpeutetreexecuter
FINALLY
 instruction_exécuté_a_la_fin_meme_si_exception
END

RAISE

Naturellement, une exception peut être déclenché par programmation. L'instruction permettant d'effectuer cette opération est «RAISE». Voici enfin les deux syntaxes autorisé :

RAISE instancedexception

ou

RAISE instancedexception AT expressiondadresse

Exemple

Cet exemple permet d'indiquer comment intercepter une division par 0 :

  1. Program TrySamples;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses SysUtils;
  6.  
  7. Var
  8.  I:Integer;
  9.  
  10. BEGIN
  11.  For I:=-10 to 3 do Begin
  12.   Try
  13.    WriteLn('I = ',I,', 1/I = ',(1 /I):0:2);
  14.   Except
  15.    On EDivByZero do WriteLn('Division par 0');
  16.    On EZeroDivide do WriteLn('Division par 0');
  17.    On EInvalidOp do WriteLn('Instruction invalide');
  18.    On EMathError do WriteLn('Erreur mathématique');
  19.    On EOverflow do WriteLn('Débordement de valeur');
  20.    On E : Exception do WriteLn('Message d''erreur = ',E.Message);
  21.   End;
  22.  End;
  23. END.

on obtiendra le résultat suivant :

I = -10, 1/I = -0.10
I = -9, 1/I = -0.11
I = -8, 1/I = -0.13
I = -7, 1/I = -0.14
I = -6, 1/I = -0.17
I = -5, 1/I = -0.20
I = -4, 1/I = -0.25
I = -3, 1/I = -0.33
I = -2, 1/I = -0.50
I = -1, 1/I = -1.00
I = 0, 1/I = Division par 0
I = 1, 1/I = 1.00
I = 2, 1/I = 0.50
I = 3, 1/I = 0.33


Dernière mise à jour : Dimanche, le 17 août 2014