Lua:
Tratamento de erros

Como Fazer:

O Lua utiliza duas funções principais para tratamento de erros: pcall e xpcall. Veja como usá-las:

function might_fail()
    if math.random() > 0.5 then
        error("Ops! Algo deu errado.")
    else
        print("Tudo certo!")
    end
end

-- Usando pcall
local success, errorMessage = pcall(might_fail)

if success then
    print("Sucesso!")
else
    print("Erro capturado:", errorMessage)
end

-- Usando xpcall com um manipulador de erro
function myErrorHandler(err)
    print("Manipulador de Erro diz:", err)
end

local status = xpcall(might_fail, myErrorHandler)
print("A chamada foi bem-sucedida?", status)

A saída de exemplo pode ser:

Erro capturado: Ops! Algo deu errado.
Manipulador de Erro diz: Ops! Algo deu errado.
A chamada foi bem-sucedida? false

Ou, se nenhum erro ocorrer:

Tudo certo!
Sucesso!
Tudo certo!
A chamada foi bem-sucedida? true

Aprofundando

Tratar erros, ou “tratamento de exceções”, nem sempre foi uma coisa. Os primeiros programas travavam – muito. Com a evolução da codificação, veio também a necessidade de estabilidade. A abordagem do Lua é simples se comparada com a de algumas linguagens. Não há blocos try/catch, apenas pcall e xpcall. O primeiro protege uma chamada de função, retornando um status e qualquer erro. O segundo adiciona uma função de tratamento de erros, útil para limpeza personalizada ou registro.

Uma alternativa no Lua é usar assert, que pode servir a um propósito semelhante, lançando um erro se a sua condição for falsa. No entanto, não é tão flexível quanto o pcall para cenários complexos de tratamento de erros.

Internamente, pcall e xpcall funcionam configurando um “ambiente protegido” para a função executar. Se um erro aparecer, o ambiente captura e pode ou tratar imediatamente ou passá-lo de volta para o programa lidar com ele.

Veja Também