Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Uso De Correcto Excepciones: TRY
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Uso De Correcto Excepciones: TRY 
 
Este post, esta dirigido a los que están iniciándose en la programación

¿que es la orden Try?
Esta orden se coloca antes de una sentencia, y hace que si se produce un error, el programa siga ejecutándose  
sin que se pare, como si no hubiese ocurrido ningún error.

¿cuando lo estamos usando  mal?
Al probar un programa, y al ocurrir un error, se suele poner la orden TRY delante de la sentencia
que nos esté dando el error. Con ello, se consigue que el programa siga ejecutandose.
Pero realmente, no hemos resuelto el problema que originaba el error, sino que lo hemos "ocultado".
Esto a la larga provoca que se produzcan otros errores, que son muy difíciles de arreglar ya que pueden están provocados por el error anteriormente "ocultado".


¿cuando es el uso correcto?
Despues de una orden TRY, tendremos que usar ERROR, para analizar que esta provocando error.

Ejemplo:
' Borrar el archivo aunque no exista
TRY KILL FileName
' Comprobar si ha fallado
IF ERROR THEN PRINT "No fue posible eliminar el archivo"


En el código anterior, hemos intentando borrar un archivo, y si se produce un ERROR se nos muestra un mensaje en la consola.


La clase ERROR tienes otras propiedades que nos dán más información:
error.code: nos dá el nº del error
error.text: nos devuelve un texto que explica que error se ha producido.
error.where: en informa en que linea se ha  producido el error

Para más información:
http://gambaswiki.org/wiki/comp/gb/error?l=es

El ejemplo anterior podriamos ampliarlo asi:
' Borrar el archivo aunque no exista
TRY KILL FileName
' Comprobar si ha fallado
IF ERROR THEN
 print error.code
 print error.text
 print error.where
 PRINT "No fue posible eliminar el archivo"
endif


Asi mostramos en la consola mucha más información de lo que ha ocurrido.


Un caso real:

Tenemos el siguiente código:

PUBLIC Function Conectar() as connection

$Con=Null ' anulo por si hay conexiones ya abiertas
$Con.Type = "sqlite3" ' definimos el tipo
$Con.Host = user.home & "/directorio" ' definimos directorio donde se encuentra la base de datos
$Con.Name = "test" ' nombre de la base de datos a la que vamos a conectarnos
TRY$Con.Open() ' abrimos la conexión
Return  $Con

END



Como vemos sirve para conectarnos y devolver la conexión a una base de datos SQLite3.
Vemos que tenemos esta linea:
TRY $Con.Open()

Y a continuación:
Return $Con

Con lo cual lo que estamos haciendo es que, ocurra lo que ocurra (incluso si ocurre un error), al abrir la conexión  .open(), vamos a devolverla.

¿y si hay un error en la conexión? dará igual, la devolvemos...(aunque sea NULL).
Si ocurre un error (por ejemplo no encuentra la base de datos),  lo que va ha provocar en otra parte del programa más errores, que serán muy difíciles de localizar ya que el error de origen esta aquí.

¿Cual seria la forma correcta de actuar?
Añadir un mensaje y describir el error que se esta produciendo, para que el usuario conozca que esta ocurriendo y/o programador sepa que algo ha ido mal al abrir la base de datos.

PUBLIC SUB Conectar()
$Con=Null ' anulo por si hay conexiones ya abiertas
$Con.Type = "sqlite3" ' definimos el tipo
$Con.Host = user.home & "/directorio" ' definimos directorio donde se encuentra la base de datos
$Con.Name = "test" ' nombre de la base de datos a la que vamos a conectarnos
TRY$Con.Open() ' abrimos la conexión
IF ERROR THEN
Message.error("Error al intentar conectarse a la base de datos")
PRINT ERROR.TEXT
PRINT ERROR.CODE
PRINT ERROR.WHERE
ENDIF

END
 




Aparte de TRY  y ERROR, tenemos disponibles  estas dos ordenes FINALLY y CATCH :
FINALLY: Siempre se ejecuta, incluso si hay error
CATCH:  Se ejecuta sólo si hay error


' Mostrar un archivo en la consola
SUB PrintFile(FileName AS STRING)
  DIM hFile AS File
  DIM sLig AS STRING
  OPEN FileName FOR READ AS #hFile
  WHILE NOT EOF(hFile)
    LINE INPUT #hFile, sLig
    PRINT sLig
  WEND

FINALLY ' Siempre se ejecuta, incluso si hay error
  CLOSE #hFile

CATCH ' Se ejecuta sólo si hay error
  PRINT "Imposible mostrar el archivo "; FileName

END



Incluso hay un componente llamado gb.logging, que nos van generar log de los errores. Estas herramientas nos permiten  crear informes de los errores que se producen en la ejecución de la aplicación y que seamos capaces de resolverlos. http://gambaswiki.org/wiki/comp/gb.logging


Fuentes:
http://gambaswiki.org/wiki/cat/error?l=es
http://gambaswiki.org/wiki/lang/try?l=es
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
OK señor julio muchas gracias por la aclaratoria no lo olvidare SALUDOS..
 



 
leonel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
Yo no dudo en usar try.
Que es mejor: ¿Comprobar si el fichero que vas a copiar (por ejemplo) existe ya en el destino y luego borrarlo...
if Exist(mificheroDestino) then
    kill mificheroDestino
endif

copy ficheroorigen to mificherodestino
    

 o símplemente borrarlo con try delante e ignorar el error?

TRY kill mifhceroDestino
copy ficheroorigento mificheroDestino


Yo me decanto por lo segundo. Eso sí, sabiendo lo que haces (por ejemplo, ¿Y si el error no es que el fichero no exista, sino que no tengas permisos en el destino para borrar (y por tanto para copiar)? Entonces el código cojea, evidentemente...
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
Exacto, esa es la cuestión: usar Try sabiendo lo que haces y por qué lo haces.

Pero estoy totalmente de acuerdo con la idea inicial de Julio, que por cierto, todos hemos repetido a los principiantes una y otra vez. No se debe usar cuando estás aprendiendo, porque así nunca vas a saber donde están los errores...

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
En los ejemplos de la base de datos del libro de Gambass se  hace uso de TRY.
Y es lo primero que va a ver el estudiante de gambas.

Habría que recordarles cuando un día creemos el pdf final (con los cambios y mejoras al manual) ,
que una vez no de errores, se debería eliminar las lineas con TRY o que ya no son necesarias.

TRY es bueno conocerlo. Como no siempre se usa lo suficiente, se olvida su verdadero uso.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
Pues disculpen que me entrometa en su conversación un poco avanzada para mi jejeje pero lo que dice el señor "shel" es muy cierto..Todos los principiantes como yo lo primero que ven son las guías y los manuales donde el uso del "try" es muy evidente y por eso cada vez que el programa no corre y nos da un error nos arrancamos los pelos pensando y buscando el error.. Ojala existiera un manual mas actualizado donde ya los principiantes puedan ver la correcciones y mejoras que se le han echo a este lenguaje de programación tan bonito y libre.. MUCHOS SALUDOS espero crecer tanto como ustedes en este ámbito  
 



 
leonel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
leonel:

Citar:
"Ojala existiera un manual mas actualizado donde ya los principiantes puedan ver la correcciones y mejoras que se le han echo a este lenguaje de programación tan bonito y libre"

El manual ya existe, y se  llama http://cursogambas.blogspot.com.es/.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Uso De Correcto Excepciones: TRY 
 
jajaja si señor juio pero yo hablo de un manual que las personas puedan usar sin tener acceso a internet.. Pero ese manual que usted realizo esta muy completo.. Gracias por ese gran aporte
 



 
leonel - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Función Para Comprobar Que Un Email Es Co... soplo Aplicaciones/Fragmentos de Código 1 Domingo, 10 Octobre 2010, 00:05 Ver último mensaje
jsbsan
No hay nuevos mensajes Ejemplo De Uso De Excepciones: Try, Error,... jsbsan Videotutoriales 0 Domingo, 30 Noviembre 2014, 12:16 Ver último mensaje
jsbsan
No hay nuevos mensajes Entrada De DNI Correcto. frajanic Aplicaciones/Fragmentos de Código 0 Sabado, 27 Junio 2015, 20:14 Ver último mensaje
frajanic
No hay nuevos mensajes Eventos. ¿ Cuál De Los Dos Códigos Os P... Shell General 3 Sabado, 04 Abril 2020, 09:38 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron