Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Uso correcto excepciones (https://www.clubdelphi.com/foros/showthread.php?t=64168)

duilioisola 20-03-2009 09:09:42

Uso correcto excepciones
 
Quisiera saber cual es el uso correcto de "try...except...finally...end"

Supongamos que tengo un conjunto de líneas que posiblemente generen una excepción y que además quiero ejecutar algo en el bloque finally.

¿Debo hacerlo con dos try anidados? (try...except, try...finally)
¿Hay alguna otra opción?

Código Delphi [-]
begin
   StringList := TStringList.Create();
   try
      try
         // algo que genera excepción
         a := 1 / 0;
      except
         on e : Exception do MessageDlg('Exception '+e.Message,mtError,[mbOk],0);
      end;
   finally
      StringList.Free;
   end;
end;

Neftali [Germán.Estévez] 20-03-2009 09:48:01

Personalmente uso bastante la estructura que has colocado. Normalmente en el Except suelo usar varias opciones y al final la captura genérica, pero la estructura es muy similar a la tuya.

rgstuamigo 20-03-2009 21:24:48

Eso es lo malo de Delphi para casos como lo que quieres, amigo duilioisola, en otros lenguajes como c++,java se puede hacer simplemente en un solo bloque por ejemplo en Java:
Código PHP:

        try {
            
//aqui se intenta hacer algo
        
} catch (Exception e) {
            
// aqui pongo la excepcion que desee
        
}
        
finally
        
{
            
//esto se ejecuta ocurra o no la excepcion
        


Ojala la siguiente version de delphi el compilador soporte este tipo de bloque para las excepciones, y asi no estar agreagando dos bloques como se hace hoy por hoy.;)
Saludos....:)

Lepe 20-03-2009 22:11:55

Ya sé que sólo es un ejemplo, pero es buena costumbre reinicializar las variables implicadas en la excepción (si se conocen), de esa forma el programa puede continuar sin causar males mayores, sobre todo si "a" es una variable a nivel de módulo (global).

Código Delphi [-]
begin
   StringList := TStringList.Create();
   try
      try
         // algo que genera excepción
         a := 1 / 0;
      except
         on e : Exception do 
           begin
             MessageDlg('Exception '+e.Message,mtError,[mbOk],0);
             a:= 1; // por poner un caso
           end
      end;
   finally
      StringList.Free;
   end;
end;

duilioisola 23-03-2009 09:25:54

Gracias a todos por vuestros comentarios!

A mi también me agradaría un bloque try..except..finally..end en alguna próxima versión.

Lepe, lo de re-inicializar las variables no lo había tenido en cuenta. Trataré de seguir esta buena costumbre, que seguramente me ahorrará horas de debuging.


La franja horaria es GMT +2. Ahora son las 17:18:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi