Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Traitrement des exceptions

Présentation

Delphi possède une gestion des exceptions pour protèger votre programme contre les erreurs éventuelles pendant son éxecution.
Le traitement des exceptions permet de se protéger des différentes erreurs éventuelles dans un programme.


Protèger un bloc

Pour protéger un bloc, vous devez inclure try et except ou try finally entre les lignes de votre code de votre programme. Cela s'avère utile pour certaine opération comme une division par 0.


try
//code à insérer
except
//code except
end;

try
//code à insérer
finally
//code finally
end;

Lorsque votre erreur se déclenche, une exception est alors soulevé.
Cette exception arrête donc l'execution de la ligne du code de votre erreur.


Type de protection Try et Except

En cas d'erreur dans la partie entre try et except, l'erreur est traité ou ignoré, ensuite les instructions contenues entre except et end sont exécutées.


Voici un exemple qui protège le programme contre une division par zéro :

var
a : integer;
begin

try

result:= 10 div a;
except
ShowMessage('Division par zéro');
end;

Une erreur se produira si l'entier "a" est égale à 0.
On aura donc un message pour avertir.


Protèger une exception

Lorsqu'un bloc de votre programme est protégé, le bloc supérieur n'est pas alerté qu'une erreur s'est produite.
Pour alerter le bloc supérieur, il faut utiliser l'instruction "raise" qui permet de propagé une exception qui a été détecté.


Soulever un exception

En Delphi, il y a la possibilité de créer une exception pour la propager.
Pour créer un objet exception, appelez le constructeur de la classe d'exception à l'intérieur d'une instruction raise.

if a=0 then
raise
Exception.Create('Le diviseur ne doit pas etre nul');
result:=10 div a;


Récupèrer un type d'exception

Il est possible de déterminer la nature de l'exception soulevée en testant le type.

try
{instructions}
except
on ClException do instruction;
else
{instructions}
end;

Le mot "on" permet de sélectionner un type d'exception.
ClException représente une classe d'exception.
Vous trouverez (en bas de la page) un tableau contenant toutes les classes d'exception.



Rupture de séquence

Lorsqu'une exception est soulevée dans un bloc d'instructions, le bloc est quitté sans l'éxécution des instructions suivantes.

procedure premiere;
begin
{Debut de premiere}
deuxieme;
{Fin de premiere}
end;

Il y aura ici une rupture de séquence si une exception est soulevée dans la procédure deuxieme. Donc, les instructions du fin de bloc ne s'excuteront pas.

Si on veut effectuer toutes les procedures à condition qu'il n'y est pas d'exception soulevé dans ces procédures, on peut alors utiliser une fonction de test.

function test : boolean;
begin
result:=false;
if
premiere then
begin

if deuxieme then
result :=True;
else
ShowMessage('deuxieme a echoue');
else
ShowMessage('premier a echoue');
end;

end;


Type de protection Try, Finally et End

Cette protection permet d'éxécuter le bloc d'instructions entre les mots finally et end.
Cette protection est utilisé pour toujours libérer les ressources.
Par contre, l'exception continue à se propager.


{allocation de la ressource}
try
{instructions utilisant la ressource}
finally
{libération de la ressource}
end;


Les exceptions de la RTL

Run Time Library est une bibliothèque de fonctions de Delphi.
Pour gérer les erreurs de la RTL, des classes d'exceptions ont été définies.


Classe d'exception
Description
EInOutError Equivaut au ErrorCode du dos.
EOutOfMemory Plus de mémoire disponible.
EInvalidPointer Pointeur d'une zone non valide.
EDivByzero Division par zéro.
ERangeError Hors des limites.
EIntOverflow Débordement de capacité.
EInvalidOp Instruction non définie.
EZeroDivide Tentative de division par zéro.
EOverflow Débordement.
EUnderflow Débordement négatif.
EInvalidcast Erreur de transtypage par as.
EConvertError Erreur de transtypage par type.
EFault Objet de base exception associé aux erreurs d'exécution.
EGPFault Faute globale de protection, pointeur invalide.
EStackFault Débordement de pile.
EPageFault Gestionnaire de mémoire Windows est incapable correctement le fichier d'échange.
EInvalidOpCode Instruction non définiee.
EBreakpoint Interruption due à un point d'arret.
ESinglestep Interruption due au déroulement pas à pas.


Soulever une excepion silencieuse

Soulever une exception silencieuse permet de ne pas afficher la boite de dialogue par le gestionnaire d'exceptions de l'application. On utilise pour cela le mot clé "Abort".

function oper(a: integer) : integer;
begin
try
result:=10 div n;
except
result:=0;
Abort; //Propagation de l'exception sans afficher le message
end;
end;

Tous droits réservés - Contacts
Haut de la page