Na linguagem Lua existe a possibilidade de executarmos uma função e verificar se ocorreu
um erro ou não. Assim, de acordo com um retorno de um status retornado, podemos fazer os
devidos tratamentos. Essa possibilidade é obtida utilizando a função pcall e
xpcall.
Sintaxe
status, valor_retorno = pcall(<f>, arg1,..., argN)
Retorno
<f>: função para executar
arg1..argN: argumentos e <f>
status: true se não houver erro, false caso contrário.
valor_retorno: mensagem de erro ou valor retornado pela função
Exemplo 3
function funcao1(param)
if(type(param) ~= "string") then
error("funcao1: param com tipagem incorreta.")
end
return 10
end
--passando argumento errado
local status,retorno = pcall(funcao1,1)
if status == false then --houve erro
print(retorno)
else --não houve erro
print("OK. Executou sem erro")
end
Saída
Main.lua:3: funcao1: param com tipagem incorreta
Com a função xpcall, temos a possibilidade de também passar uma função, para ser
executada/testada como argumento. Além disso, podemos passar uma segunda função para
lidar com erros caso estes ocorram.
Sintaxe
status,valor_retorno = xpcall(<f>, <err>,arg1,..., argN)
Sintaxe
function = nome_funcao_err(error)
Onde
<f>: função para executar
<err>: função para tratamento do erro
error: erro ocorrido
arg1..argN: argumentos e <f>
status: true se não houver erro, false caso contrário.
valor_retorno: valor retornado pela função
Exemplo 3
function funcao1(param)
if(type(param) ~= "string") then
error("funcao1: param com tipagem incorreta.")
end
return 10
end
function funcao_erro(err)
print(err)
end
--passando argumento errado
local status,erro,retorno = pcall(funcao1,funcao_erro,1)
--imprimindo retornos
print(status)
print(erro)
print(retorno)
Saída
false
Main.lua:3: funcao1: param com tipagem incorreta.
nil