Foros Club Delphi

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

adpa 14-12-2005 09:08:26

Excepciones
 


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:

Código Delphi [-]
  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:

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 05:12:45.

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