Control De Errores En Una Aplicación De Consola


Objetivo: Control De Errores En Una Aplicación De Consola
Buenos días!.

Comienzo de semana. Si el humor de los viandantes se reflejase con un emoticono sobre la cabeza, habría muchos repetidos del mismo. "Felicidad!".

Se me presenta un problema con el control de errores de una aplicación de consola.
Que puede que sea igual que en una de formulario.

La mayoría de los lenguajes tienen un control de errores parecidos. En algunos se expande un poco.
En este caso vengo de un ejemplo en Python y quiero hacer algo parecido en Gambas.
Se trata de controlar las dimensiones de un tablero. En este tablero el número de losetas, cuadrados, escaques debe ser par.
Debe cumplirse una condición. Así por ejemplo tengo dos constantes definidas al principio:

Const TABLEROANCHO As Integer = 10
Const TABLEROALTO As Integer = 7


Ahora bien. Para saber si son par: Si yo hiciera algo como esto:

If (TABLEROANCHO * TABLEROALTO) Mod 2 = 1 Then Error.Raise("Tablero necesita tener un número par de cajas para que coincidan parejas.")

La aplicación se para dando el consiguiente error:

Citar:

Main.Main.9: Tablero necesita tener un número par de cajas para que coincidan parejas.
Main.Main.9


El error se me mostraría dentro del editor y parece que también en la consola. Al crear el ejecutable también lo acabo de ver.
En Python existe un comando llamado Assert.

Citar:

The "assert" statement
**********************

Assert statements are a convenient way to insert debugging assertions
into a program:

assert_stmt ::= "assert" expression ["," expression]

The simple form, "assert expression", is equivalent to

if __debug__:
if not expression: raise AssertionError

The extended form, "assert expression1, expression2", is equivalent to

if __debug__:
if not expression1: raise AssertionError(expression2)

These equivalences assume that "__debug__" and "AssertionError" refer
to the built-in variables with those names. In the current
implementation, the built-in variable "__debug__" is "True" under
normal circumstances, "False" when optimization is requested (command
line option -O). The current code generator emits no code for an
assert statement when optimization is requested at compile time. Note
that it is unnecessary to include the source code for the expression
that failed in the error message; it will be displayed as part of the
stack trace.

Assignments to "__debug__" are illegal. The value for the built-in
variable is determined when the interpreter starts.


Así es como lo tengo en el ejemplo:

assert (TABLEROANCHO * TABLEROALTO) % 2 == 0, 'Tablero necesita tener un número par de cajas para que coincidan parejas.'


En caso de error (dimensiones incorrectas definidas en las constantes ) mostraría:

Citar:

Traceback (most recent call last):
File "/home/..../Programacion/Python/HaciendoJuegosConPyGame/Capitulo3_Memory_Puzzle/memoriapuzzle.py", line 13, in <module>
assert (TABLEROANCHO * TABLEROALTO) % 2 == 0, 'Tablero necesita tener un número par de cajas para que coincidan parejas.'
AssertionError: Tablero necesita tener un número par de cajas para que coincidan parejas.
[Finished in 1.0s with exit code 1]


En gambas después del Raise ya no podría conocer más información si usara la clase Error.
Ejemplo, tipo, línea...

Podría haber añadido algo parecido a esto:

Public Sub Main()

If (TABLEROANCHO * TABLEROALTO) Mod 2 = 1 Then Error.Raise("Tablero necesita tener un número par de cajas para que coincidan parejas.")

Catch
Print Error.Text
Print Error.Code
Print Error.Class
Print Error.Where

Print "Y esto ?"

End


El mensaje de Error.Raise no se muestra, pero si muestra la información a continuación del Catch. Claro que también se mostraría el mensaje del final.
No se pararía la ejecución que e lo que hace Error.Raise.

Rectifico, si lo ejecuto y veo la salida de consola del editor:

Citar:

Tablero necesita tener un número par de cajas para que coincidan parejas.
-1
(Class 0x10377f8)
Main.Main.9
Y esto ?


Y si lo ejecuto como ejecutable:

Citar:

Tablero necesita tener un número par de cajas para que coincidan parejas.
-1
(Class 0x14f7978)
Main.Main.9


Parece que se para..

Saludos

última edición por Shell el Lunes, 07 May 2018, 08:57; editado 1 vez
Objetivo: Re: Control De Errores En Una Aplicación De Consola
Si hubiese usado el emulador de terminal de Gambas:

emuladordeterminaldegambas

Sigue mostrándose el mensaje del final.

Saludos

Objetivo: Re: Control De Errores En Una Aplicación De Consola
Como condición..

Public Sub Main()

valor = (TABLEROANCHO * TABLEROALTO) Mod 2

If valor = 0 Then
Print "Par..."
Else
Debug "Tablero necesita tener un número par de cajas para que coincidan parejas."
' Código para parar ejecución
Endif


¿ Pararíais ahí de alguna forma ?.

Saludos

Objetivo: Re: Control De Errores En Una Aplicación De Consola
Shell:
Citar:
¿ Pararíais ahí de alguna forma ?.

Usando el comando quit

http://gambaswiki.org/wiki/lang/quit

Objetivo: Re: Control De Errores En Una Aplicación De Consola
Julio:

Citar:

Usando el comando quit


Ostras. Hace años que no veía esta instrucción. Como normalmente en formularios uso Me.Close,
se va olvidando quit.

Parece que da problemas con aplicaciones con formularios. Jeje, dice que se cerrará lo mejor posible.
Creo que a más de uno de nosotros nos tiene que haber dado un quebradero de cabeza esta instrucción con formularios.

Mejor para consola, perfecto. Visto así poco control de errores tiene.

If valor = 0 Then
Print "Par..."
Else
Debug "Tablero necesita tener un número par de cajas para que coincidan parejas."
Quit
Endif

A ver si le puedo añadir algún detalle para conocer algo más del error.
Debe ser una instrucción muy repetida para casos de ese tipo. Mensaje de error y salida.

Gracias.

P.d ¿ Soléis usar número de líneas en el código ?. Puede ser complicado buscar un error sin número de línea.
Ya se que recuerda a viejos basic's.

Saludos

Objetivo: Re: Control De Errores En Una Aplicación De Consola
Shell:

Citar:
¿ Soléis usar número de líneas en el código ?.

Yo los pongo para que se vean. Asi si hay algun error, los puedo localizar rápidamente.

Objetivo: Re: Control De Errores En Una Aplicación De Consola
Yo siempre muestro la combinación error.text;;error.where en los errores.
Sin embargo del tema que aquí se habla, la introducción de números distintos por parte del usuario, creo que está mal planteado: No es un error del programa, es un mal manejo del usuario.
Deja la gestión de errores para los errores del programa, es decir, para situaciones no contempladas previamente y depura los datos para avisar, repetir, explicar etc. los eventos generados por el usuario.

Saludos

Perfil MP  
Objetivo: Re: Control De Errores En Una Aplicación De Consola
Shordi:

Es que en este caso, es algo como en producción, aun no habrá llegado a manos del usuario.
Todas esas constantes que maneja la aplicación pueden ser cambiadas y con eso cambiará
la presentación del tamaño del tablero, de cada celda de este, el tamaño del icono dentro estas.
Si no se provoca o se llama la atención a hacerlo, no se puede ver el efecto que causa.

Es un código que esta abierto. En parte es que estos códigos son para iniciarse en la creación de juegos
mediante un lenguaje de programación.

El uso de estas constantes enseña al programador a valorar el uso de estas, antes que usar variables
que puedan cambiarse al escribir.

Es un cambio de crear juegos de consola a una interfaz gráfica mediante una librería.
Un aprendizaje que cambia con cada nuevo juego.

Aunque intento implementar la creación de un juego de un lenguaje y traerlo a gambas,
luego resulta que me encuentro cosas muy diferentes, aunque se llamen igual.


Saludos


Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1289s (PHP: -23% SQL: 123%)
Consultas SQL: 24 - Debug off - GZIP Activado