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:
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:
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
===================
Gambas Básico
"No es un bug, es una característica no documentada"