Ver Mensaje Individual
  #6  
Antiguo 26-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Contraveneno
En muchos casos es necesario que coloques un raise para que cuando ocurra un error que no conoces o no esperas, sea mostrado (...)

Raise
eleva, como suele decirse, la excepción que se produzca.

Cita:
Empezado por Contraveneno
en fin, la parte de "¿necesario?" es para este código en específico ya que en la parte del showmessage muestra la clase de error y el mensaje, cosa que tambien hace el raise (...)
No, exactamente. Obsérvese/pruébese el siguiente código:

Código Delphi [-]
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Pruebas;
      except
        ShowMessage('Estamos en Button1Click');
      end;
    end;
    
    procedure TForm1.Pruebas;
    var
      i,j: integer;
    begin
      i := 0; j := 0;
      try
        i := i div j;
      except
        ShowMessage('Estamos en Pruebas()');
        Raise;
      end;
      // Usamos la variable "i"
      Caption := IntToStr(i);
    end;

En este caso se producirá una excepción "EDivByZero" y se mostrará el mensaje "Estamos en Pruebas()", pero, puesto que "elevamos" la excepción mediante Raise y además hemos incluido la llamada al procedimiento "Pruebas" en un bloque "try .. except" también podremos ver el mensaje "Estamos en Button1Click".

Si no hubiéramos llamado al procedimiento "Pruebas()" en un bloque "try .. except" pero hubiéramos "elevado" la excepción, en este caso, la excepción seguiría hacia arriba hasta ser tratada por el método oportuno de la clase "TApplication" y veríamos el mensaje "Error: EDivByZero exception", luego de "Estamos en Pruebas()".

Si no incluyéramos la instrucción Raise se mostraría el mensaje "Estamos en Pruebas()" y ninguno otro, puesto que ese es el tratamiento, en este caso de ejemplo, que dimos a la excepción y no quisimos ir más allá elevando la excepción para que la rutina que llamara a la que la produjo pudiera tratarla por su parte.

Si añadiéramos una instrucción Raise dentro del bloque "try .. except" del evento "Button1Click" entonces podríamos ver tres mensajes, en este caso: el "Estamos en Pruebas()", el "Estamos en Button1Click" y por último, insisto, en este caso, el mensaje "Error EDivByZero" exception".
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 26-07-2005 a las 02:04:46. Razón: (corrección del texto)
Responder Con Cita