PDA

Ver la Versión Completa : Excepciones


adpa
14-12-2005, 09:08:26
Hola, estoy empezando a programar en Delphi 4

Tengo el siguiente problema con las excepciones.

Tengo una función con un bucle y dentro de este bucle se llama a una función

donde se pueden producir excepciones que yo capturo.

Entonces si se produce una excepción ya no continua en el bucle,

¿Como se hace para que continue con el bucle, hasta que llegue a la

condición de salida de este?

Gracias es muy urgente

Neftali [Germán.Estévez]
14-12-2005, 11:44:36
Antes de nada y puesto que son tus primeros mensajes, bienvenido al foro.
Te recomiendo que leas la guía de estilo: http://www.clubdelphi.com/foros/guiaestilo.php

Entre otras cosas varás que no es correcto repetir hilos en diferentes foros.

En cuanto a la pregunta, si capturas la excepción dentro del bucle (en lugar de fuera), no debería haber problema para que el bucle cntinuara si la condición se sigue cumpliendo.

adpa
14-12-2005, 13:50:42
Hola todo@s.

En principio perdón pero no me di cuenta de las reglas de estilo.
Capturo la excepción en la función que se produce. Más o menos es esto

WHILE () DO
BEGIN
....
funcion que puede producir excepción
....
END

Funcion que puede producir excepción
BEGIN
try
...
except
on E: EConvertError do
raise eCamposNoValido.Create('');
end;
END;

Entonces si se produce una excepción al volver al bucle se sale.

Gracias

Neftali [Germán.Estévez]
14-12-2005, 14:04:05
En realidad estás capturando la excepción (try..except), pero luego la estás "lanzando" de nuevo al utilizar:


raise eCamposNoValido.Create('');



Con ésto lo que estás haciendo es volver a lanzarla; Lo lógico aquí sería guardar valor, sacar un mensaje,... pero si vuelves a hacer el raise, la excepción sigue, llega al bucle y como ahí no hay Try..except que la capture, pues se para (como tú dices).

¿Exactamente qué quieres hacer cuando se produzca una excepción (antes de continuar con el bucle)?

adpa
14-12-2005, 14:32:13
Lo que quiero hacer cuando se produzca la excepción es que se continue con el bucle.

Pero en la función de bucle que sepa que se ha produccido una excepción para luego informar al usuario cuando se termine el bucle.

Espero que me entiendas, Gracias

roman
14-12-2005, 15:45:45
Podrías utilizar un TStringList en el que almacenes las excepciones que se vayan produciendo en las vueltas del bucle y presentarlas al final de éste:


var
Errores: TStringList;

begin
Errores := TStringList.Create;

try
while condición do
begin
try
{ código propenso a errores }
except
on E: EConvertError do
Errores.Add(E.Message);
end;
end;

(* Mostrar errores en un memo, por ejemplo *)
Memo1.Lines.AddStrings(Errores);
finally
Errores.Free;
end;
end;


// Saludos