Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Instrucciones y ejemplos para capturar errores genéricos y diferencia entre except y finally - Dephi)
Lenguaje de programación Borland Delphi


Este artículo muestra cómo capturar errores genéricos en Delphi y mostrar (o no) mensajes a medida.

En primer lugar explicamos las dos estructuras básicas para la captura de errores:

1ª En la estructura que mostramos a continuación sólo se ejecutará el código que va entre el "except" y el "end" si se produce un error:

...

begin

  ... //código que estará fuera de la captura de errores, normalmente 
       //se colocará fuera el código que sepamos que no puede dar errror

  try
    
     // Aquí irá el código susceptible de provocar errores

  except
     
    //colocaremos aquí el código que se ejecutará si se produce un error,
    //sólo se ejecutará si se produce un error

  end;

end;
2ª En la siguiente estructura el código que va entre el "finally" y el "end" se ejecutará siempre (tanto si se produce error como si no):
...

begin

  ... //código que estará fuera de la captura de errores, normalmente 
       //se colocará fuera el código que sepamos que no puede dar errror

  try
    
     // Aquí irá el código susceptible de provocar errores

  finally
     
    //colocaremos aquí el código que se ejecutará tanto si 
    //se produce un error como si no

  end;

end;
Por ejemplo podemos acotar un código susceptible de que se produzca una división por cero con un "try" y un "except" de la siguiente forma:
...  
var
  numero1, numero2, numero3 : integer;
begin
  numero1 := 0;
  numero2 := 1;
  try
    numero3 := numero1 div numero2;
    ShowMessage ('Esta línea no se ejecutará pues se producirá el error.');
  except
    on e : exception do
    begin
      ShowMessage ('Clase de error: ' + e.ClassName + chr(13) + chr(13) + 
          'Mensaje del error: ' + e.Message);
    end;
  end;
end;
En este ejemplo hemos utilizado el objeto "exception" que es la clase padre. Si queremos mostrar un mensaje personalizado por cada tipo de error utilizaremos el siguiente código:
...  
var
  numero1, numero2, numero3 : integer;
begin
  numero1 := 0;
  numero2 := 1;
  try
    numero3 := numero1 div numero2;
    ShowMessage ('Esta línea no se ejecutará pues se producirá el error.');
  except
    on e : EDivByZero do
    begin
      ShowMessage ('Ha intentado dividir un número por cero.');
    end;
    else
      ShowMessage ('Se ha producido un error: ' + chr(13) + chr(13) +
          'Clase de error: ' + e.ClassName + chr(13) + chr(13) + 
          'Mensaje del error: ' + e.Message);
  end;
end;
Un último ejemplo utilizando "finally" (código que siempre se ejecutará tanto si hay error como si no):
procedure TformMenuPrincipal.actCuentasEmailExecute(Sender: TObject);
var
  formulario : TformCuentas;
begin
  formulario := TformCuentas.Create(Application);
  try
    formulario.ShowModal;
  finally
    formulario.Free;
  end;
end;
En este caso hemos utilizado un ejemplo que crea un formulario y lo muestra modal, si la línea "formualario.ShowModal" da un error (por cualquier causa) se ejecutará lo que haya en el "finally" y si no da error también, con lo cual, en este caso, nos aseguramos de que el formulario modal se libera tras su ejecución.

A continuación os mostramos un listado de clases de excepciones:

Exception             Base class
 EAbort                Abort without dialog
 EAbstractError        Abstract method error
 AssertionFailed       Assert call failed
 EBitsError            Boolean array error
 ECommonCalendarError  Calendar calc error
   EDateTimeError      DateTime calc error
   EMonthCalError      Month calc error
   EConversionError    Raised by Convert
 EConvertError         Object convert error
 EDatabaseError        Database error
 EExternal             Hardware/Windows error
   EAccessViolation    Access violation
   EControlC           User abort occured
   EExternalException  Other Internal error
 EIntError             Integer calc error
   EDivByZero          Integer Divide by zero
   EIntOverflow        Integer overflow
   ERangeError         Out of value range
 EMathError            Floating point error
   EInvalidArgument    Bad argument value
   EInvalidOp          Inappropriate operation
   EOverflow           Value too large
   EUnderflow          Value too small
   EZeroDivide         Floating Divide by zero
 EStackOverflow        Severe Delphi problem
 EHeapException        Dynamic memory problem
   EInvalidPointer     Bad memory pointer
   EOutOfMemory        Cannot allocate memory
 EInOutError           IO error
 EInvalidCast          Object casting error
 EInvalidOperation     Bad component op
 EMenuError            Menu item error
 EOSError              Operating system error
 EParserError          Parsing error
 EPrinter              Printer error
 EPropertyError        Class property error#
 EPropReadOnly         Invalid property access
 EPropWriteOnly        Invalid property access
 EThread               Thread error
 EVariantError         Variant problem




Publicado el: 2005-07-11

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A