Bienvenidos sean a este post, hoy veremos como manejar errores aunque no necesitamos manejarlo en Lua porque el programa hace este manejo, ya que todas las actividades en Lua comienzan desde una llamada por la aplicacion y preguntandole a Lua para correr un chunk, si ocurre un error esta llamada devuelve un codigo de error y asi la aplicacion toma las acciones correctas, por ejemplo en el caso del interprete su bucle principal muestra el mensaje del error y continua mostrando el prompt y ejecutando los comandos, por esto si necesitas manejar errores en Lua, se debe usar la funcion pcall (protected call) para encapsular tu codigo.

Anuncios

Vamos a suponer la siguiente situacion, quieres correr una pieza de codigo de Lua y atrapar cualquier error que pueda ocurrir mientras corre ese codigo, tu primer paso es encapsular esa pieza de codigo en una funcion, utilicemos a foo:

fucntion foo()
	... instrucciones ...
	if condicion_inesperada then error() end
	... instrucciones ...
	print(a[i])
	... instrucciones ...
end

En este codigo tendremos un condicional que chequeara por una condicion inesperada y llamara a error pero tambien tendremos un print(a[i]) que puede ser un potencial error porque a podria no ser una tabla, nuestro siguiente paso sera llamar a foo con pcall:

if pcall(foo) then
	... instrucciones ...
else
	... instrucciones ...
end

En este caso llamaremos de forma protegida a foo con un condicional, si no ocurre ningun error con foo ejecutara las instrucciones en ese bloque porque pcall devolvera un true, en cambio si ocurre un error ejecutara el bloque else, tambien se puede usar con funciones anonimas:

Anuncios
if pcall(function()
	... instrucciones ...
end) then
	... instrucciones ...
else
	... instrucciones ...
end

Mas alla de su nombre, el mensaje de error no tiene que ser una cadena, cualquier valor de Lua pasado por la funcion error sera regresado por pcall:

local estado, err = pcall(function () error({codigo=121}) end)
print(err.codigo)

En este caso tendremos como salida el valor 121, como hemos visto estos mecanismos nos daran todo lo necesario para manejar excepciones en Lua, podemos decir que su forma de trabajar es: lanzamos una excepcion con error y capturarlo con pcall, el mensaje de error identifica el tipo o el error.

Anuncios

En resumen, hoy hemos visto como manejar los errores o excepciones en Lua, el metodo encargado de hacerlo, como trabaja, donde se puede aplicar, y otras formas de trabajar, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00