Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-01-2016
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Excepciones en Lazarus

Cordial saludo,

He visto en varios foros y páginas que hay un problema con el manejo de excepciones en Lazarus, ya que el bloque TRY, FINALLY no realiza su función debidamente.

Ejemplo:

Código Delphi [-]
try
  ShowMessage(IntToStr(StrToInt('a1')));
finally
  ShowMessage('Número no válido');
end;

A pesar de que está en un bloque TRY FINALLY, el programa genera el error y no continua su ejecución, dentro o fuera del entorno de Lazarus.

Solicito de su colaboración para indicarme cómo puedo tratar los errores en el código.

De antemano, gracias por su colaboración.

Última edición por roman fecha: 25-01-2016 a las 18:56:33. Razón: Corregir la etiqueta delphi
Responder Con Cita
  #2  
Antiguo 25-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Página 223 en adelante.
Responder Con Cita
  #3  
Antiguo 25-01-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cd.rafael Ver Mensaje
el bloque TRY, FINALLY no realiza su función debidamente.
Para no desalentar el estudio de excepciones que te propone Casimiro Notevi, simplemente diré que el bloque try-finally no maneja excepciones

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 25-01-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cd.rafael.

Hay dos puntos, el primero es que tendrías que usar try/except para capturar la excepción. Ya Casimiro te señaló un enlace donde se trata el tema de forma excelente.

Lo segundo y que corresponde al IDE de Lazarus, es que tendrías que desactivar la opción "Notificar en excepciones de Lazarus", para lo que debes dirigirte en la barra de menu a : Herramientas -> Opciones -> Depurador -> Excepciones del lenguaje

Saludos

Edito: Veo que roman ya había apuntado el detalle del uso de finally mientras publicaba este mensaje
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-01-2016 a las 19:32:08.
Responder Con Cita
  #5  
Antiguo 25-01-2016
cd.rafael cd.rafael is offline
Miembro
 
Registrado: abr 2012
Posts: 59
Poder: 13
cd.rafael Va por buen camino
Unhappy

Efectivamente al cambiar por except funcionó, aunque me acuerdo que en Delphi no tenía esos inconvenientes.

Es posible que los años (sin usar Delphi) no vengan solos.

Muchas gracias a todos por su aporte y colaboración.
Responder Con Cita
  #6  
Antiguo 25-01-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En delphi es igual. No son inconvenientes, simplemente es que except y finally tienen dos objetivos distintos.

LineComment Saludos
Responder Con Cita
  #7  
Antiguo 25-01-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por cd.rafael Ver Mensaje
Efectivamente al cambiar por except funcionó, aunque me acuerdo que en Delphi no tenía esos inconvenientes.

Es posible que los años (sin usar Delphi) no vengan solos.

Muchas gracias a todos por su aporte y colaboración.
Pues asi parece. Va a hacer falta repasar algo. Yo también tuve mi "paro" y me costó un poco volver a subirme. La falta de práctica hizo que olvidara algunos principios básicos. Le puede pasar a cualquiera.
Parece que en programación no es como andar en bicicleta.

Cita:
Empezado por roman Ver Mensaje
En delphi es igual. No son inconvenientes, simplemente es que except y finally tienen dos objetivos distintos.

LineComment Saludos
Bien dicho. Son dos cosas pensadas para cada situación. Aunque también hasta se podría combinarlos.

Lo que quizá haría falta aclarar es que esto de como se maneja la excepciones no es cosa de Delphi o de Lazarus sino más bien ya es cosa de como ha sido pensado y diseñado (y estandarizado convengamos) Object Pascal. que es el realidad el verdadero lenguaje. ¡Cuando no el IDE tratando de ponerse por encima del lenguaje che! Mal hacemos en no corregir esto. Que mal acostumbrados estamos.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #8  
Antiguo 26-01-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Delphius Ver Mensaje
Bien dicho. Son dos cosas pensadas para cada situación. Aunque también hasta se podría combinarlos. (...)
Precisamente hay una propuesta en estudio en el equipo de FreePascal (y si no recuerdo mal, Embarcadero también la tenía sobre la mesa) para "TRY ... FINALLY ... EXCEPT ... END;" y así no tener que anidar el "TRY ... FINALLY ... END;" dentro de "TRY ... EXCEPT ... END;". Y la verdad, es una de las pocas modificaciones del lenguaje que me parece realmente útil en los últimos años.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #9  
Antiguo 26-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Precisamente hay una propuesta en estudio en el equipo de FreePascal (y si no recuerdo mal, Embarcadero también la tenía sobre la mesa) para "TRY ... FINALLY ... EXCEPT ... END;" y así no tener que anidar el "TRY ... FINALLY ... END;" dentro de "TRY ... EXCEPT ... END;". Y la verdad, es una de las pocas modificaciones del lenguaje que me parece realmente útil en los últimos años.
Interesante
Responder Con Cita
  #10  
Antiguo 26-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Sería genial pero me gustaría más try except finally end

El finally maneja el código que se ejecuta siempre, me parece más natural y legible

Además por la forma en que hoy los anidamos el orden es ese
Responder Con Cita
  #11  
Antiguo 26-01-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Precisamente hay una propuesta en estudio en el equipo de FreePascal (y si no recuerdo mal, Embarcadero también la tenía sobre la mesa) para "TRY ... FINALLY ... EXCEPT ... END;" y así no tener que anidar el "TRY ... FINALLY ... END;" dentro de "TRY ... EXCEPT ... END;". Y la verdad, es una de las pocas modificaciones del lenguaje que me parece realmente útil en los últimos años.
Yo a esa la apoyo. A mi me rompió la cabeza un poco llegar a acostumbrarme ver esto:

Código Delphi [-]
try
  Obj := TObjecto.Create();
  try
    // Usar objeto
  finally
    // setear variable de estado
    Obj.Free;
  end;
except
   On E: ExceptionConcreta do // y otras excepiones que podría producirse por el objeto ¡o su creación misma!
   begin                                 // y convertirlas a un contexto más superior    
     // hacer algo con esto
    raise ExceptionMasConcretaDetallada.Create(...);
   end;
   // ...                                
end;

Había visto hace días algunas propuestas (más que propuestas son pedidos) en el foro de Lazarus/FreePascal un tanto fuera de norma, como pretender que el for itere de a saltos, o que el swith sea como el que posee Ada. En fin.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
codigo de lazarus windows a lazarus linux anubis Lazarus, FreePascal, Kylix, etc. 5 20-04-2013 21:33:55
Manejo de Excepciones de Base de Datos MySQL en Lazarus comodoro MySQL 6 14-05-2012 14:18:04
manejo de excepciones en lazarus marioar Lazarus, FreePascal, Kylix, etc. 3 02-12-2010 23:07:12
Duda Sobre Excepciones - Propagar Excepciones entre los formularios Neeruu Varios 2 26-02-2010 20:36:50
[Lazarus] GTK+-devel en SUSE. problema instalar lazarus de esa libreria. sakuragi Lazarus, FreePascal, Kylix, etc. 3 28-09-2006 03:31:09


La franja horaria es GMT +2. Ahora son las 04:09:35.


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
Copyright 1996-2007 Club Delphi