Manejo de errores en Lua

Anuncio
Manejo de Excepciones en
Lua
Por lo general, las aplicaciones de Lua no necesita manejar explícitamente
las excepciones, puesto que Lua tiene una biblioteca que lo hace
(lua_pcall), y esta biblioteca, cada vez que haya un error en la compilación o
ejecución, el control del programa retornara a C, ¿por qué C ?, por que
debido a que Lua es un lenguaje de extensión embebido, todas las acciones
de Lua comienzan con código C en el programa anfitrión, y éste llama a la
biblioteca lua_pcall.
Pero si se desea, el usuario puede manejar de forma explicita los manejos
de errores en su programa, para esto, se cuenta con 2 funciones, estas son:
- La función error
- La función pcall.
Función Error
Consiste en, añadir al comienzo del mensaje, cierta información acerca de la posición del
error. El argumento nivel especifica cómo obtener la posición del error. Con nivel 1 (por
defecto) la posición del error es donde fue invocada la función error. Nivel 2 apunta el error
hacia el lugar en que fue invocada la función que llamó a error; y así sucesivamente. Pasar
un valor 0 como nivel evita la adición de la información de la posición al mensaje.
error(mensaje,[i]) -- i es el número del nivel del error
Invocaremos una función llamada fun y usaremos la función error para el manejo de error:
function fun ()
... ...
if (condicion inesperada) then error() end
... ...
print(a[i]) -- error: `a' no es elemento de la tabla (a [i]) –
... ...
end
Función pcall
Consta en que invoca una función con los argumentos dados en modo protegido. Esto
significa que ningún error dentro de la función se propaga; en su lugar pcall captura el
error y retorna un código de estatus. Su primer resultado es el código de estatus
(booleano), el cual es verdadero si la llamada tiene éxito sin errores. En ese caso pcall
también devuelve todos los resultados de la llamada después del primer resultado. En
caso de error pcall retorna false más un mensaje de error.
Cuando Lua se encuentra con cualquier error (tal como un error de asignación de
memoria, un error de tipo, un error de sintaxis o un error de ejecución) entonces activa
un error, esto es, realiza un salto largo en la memoria.
pcall(función(args) … end)
Este es un ejemplo general de cómo usar pcall de forma anónima:
if pcall(function () ... end) then ...
else ...
Aquí, un ejemplo de la función pcall, lo cual se encapsulará el error. Para eso, tenemos que seguir ciertos
pasos.
- La función pcall, se encargará de “encapsular” el error.
f pcall(foo) then
-- no hay errors en la funcción `foo'
...
else
-- `foo' tiene errors, tomar acciones.
...
end
Descargar