Utilisateur anonyme
-
13 août 2003 à 23:02
Emandhal
Messages postés194Date d'inscriptiondimanche 2 mars 2003StatutMembreDernière intervention10 octobre 2006
-
15 août 2003 à 02:26
Bonjour. Je voudrais mettre en place, sur une petite partie de mon code, une gestion d'erreur du genre suivant :
try {bloc d'instructions à protéger}
except {si erreur, afficher : telle erreur s'est produite...}
finally {ce code doit être éxecuté quand une des instructions protégées provoque une erreur, ou à la fin des instructions s'il n'y a pas d'erreur}
end;
Mais le compilateur refuse cette structure (même chose si on inverse l'ordre de except et de finally).
Une solution peut être de n'utiliser qu'un bloc finally, et de détecter si une erreur s'est produite au moment de rentre dans ce bloc d'instruction...
Emandhal
Messages postés194Date d'inscriptiondimanche 2 mars 2003StatutMembreDernière intervention10 octobre 20063 14 août 2003 à 10:39
perso je ferai cette structure (en fait c celle que j'utilise...) :
try {bloc d'instructions à protéger}
except {si erreur, afficher : telle erreur s'est produite...}
end; {ce code doit être éxecuté quand une des instructions protégées provoque une erreur, ou à la fin des instructions s'il n'y a pas d'erreur}
avec ca s'il y a une erreure, il exécutera le Except et continuera le prog à la suite de end; et donc exécutera la finalisation meme si c pas explicite...
Tout problème a sa solution... Mais en général, c'est jamais la bonne...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 14 août 2003 à 14:31
Est-ce que ça viendrait à l'idée de quelqu'un d'écrire un BEGIN et d'y adjoindre plusieurs END ?
Non, sûrement.
De la même façon, les blocs de protection try..finally..end et try..except..end sont des blocs entiers. A un try doit correspondre un seul finally ou un seul except !
Ainsi, le code suivant ne déclenchera aucune réaction du compilateur puisqu'on aura respecté la grammaire :
try
//insertion d'un deuxième bloc à l'intérieur du premier
try
//
except
//
end; {du bloc try..except}
finally
//
end;{du bloc try..finally}
Avec la solution proposée par Emandhal, si tu as alloué des ressources avant le try, elles ne seront pas libérées puisque l'exception "remontera" aussitôt au niveau du gestionnaire d'exception de l'objet Application (par défaut).
Prendre comme hypothèse que de toute façon ça continuera après le end du bloc try..except, c'est admettre que l'application puisse continuer de fonctionner avec des valeurs farfelues ou des pointeurs errants...c'est pas très sérieux !
May Delphi be with you
Si j'ai bien compris, si une erreur se produit dans la partie TRY du bloc TRY..EXCEPT (là ou je mets mon code à protéger), le bloc EXCEPT va être éxecuté, affichant un message d'erreur personnalisé, mais comme il ne gère pas l'erreur, celle-ci va se propager dans le bloc TRY..FINALLY, déclenchant donc immédiatement l'éxecution des instructions situées après FINALLY.
Mais au niveau de la section EXCEPT, la gestion d'erreur est-elle implicite (les erreurs sont gérées et ne se propagent pas, sauf si je spécifie le contraire) ou explicite (les erreurs se propagent, sauf si je donne des instructions on..do..) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?