Tratamento de Erros Lua

Neste artigo, discutiremos o tratamento de erros em Lua e discutiremos várias técnicas para lidar com erros em Lua.

Na programação, o tratamento de erros permite detectar e tratar erros que podem ocorrer durante a execução do programa.

Os erros podem ser divididos em dois tipos: erros de sintaxe e erros de tempo de execução.



Erros de sintaxe Lua

Erros de sintaxe ocorrem quando o código do programador viola as regras de sintaxe da linguagem .

O interpretador ou compilador detecta erros durante a compilação do código.

Erros de sintaxe impedem a execução do código e geralmente são fáceis de corrigir.

Um exemplo de erro de sintaxe é dado abaixo:

Example: 

1
2
3
print("Hello, World!"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Há um erro de sintaxe no código acima. O motivo é que o parêntese de fechamento “ ) ” está faltando no final da instrução, o que faz com que o código fique incompleto e inválido.

Aqui está outro exemplo de erro de sintaxe:

Example: 

1
2
3
4
5
6
7
8
function sayHello(name)
print("Hello, " name "!")
end
sayHello("John")
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Nesse código, a função sayHello pega um nome de parâmetro e tenta imprimir uma saudação com o nome incluído. No entanto, há um erro de sintaxe na instrução de impressão em que a string e a variável não são concatenadas corretamente com uma vírgula ou operador de concatenação.

Os erros de sintaxe podem ser evitados verificando novamente a sintaxe do código e usando as convenções de codificação adequadas. É uma boa prática usar um ambiente de desenvolvimento integrado (IDE) que verifica erros de sintaxe em tempo real.

Quando encontramos um erro de sintaxe, precisamos voltar ao código, encontrar o erro e corrigi-lo. Depois de corrigir o erro, podemos executar o código novamente para garantir que ele seja executado sem erros de sintaxe.


Erros de Tempo de Execução da Lua

Os erros de tempo de execução ocorrem quando o programa é executado e algo inesperado acontece que o impede de continuar normalmente.

Por exemplo, o trecho de código a seguir resultará em um erro de tempo de execução:

Example: 

1
2
3
4
5
6
7
8
9
10
local x = "Hello"
local y = 5
-- Attempt to perform addition with a string and a number
local z = x + y
print(z)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

O código acima resulta em erro porque a variável x é uma string e não pode ser adicionada à variável y, que é um número.

Aqui está outro exemplo de um erro de tempo de execução:

Example: 

1
2
3
4
5
6
7
8
function remainder(x,y)
return x%y
end
print(remainder(11))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Este é um erro de tempo de execução causado pela ausência de uma variável necessária.

Neste caso, o parâmetro “ y ” não foi passado, resultando em seu valor ser nulo, o que gerou o erro.


Funções Assert e Error

As duas funções assert e error são freqüentemente usadas para lidar com erros.

Função de Asserção

A função assert em Lua é usada para tratamento de erros e para verificar se uma determinada condição é verdadeira.

Quando a condição for true , a função não faz nada e retorna seu valor. No entanto, se a condição for false , a função assert lançará um erro com uma mensagem de erro especificada.

A sintaxe da função assert é a seguinte:

assert(condition, [error_message])

Vejamos um exemplo que implementa a função assert no exemplo de erro de tempo de execução acima:

Example: 

1
2
3
4
5
6
7
8
9
10
local function remainder(x,y)
assert(type(x) == "number", "x is not a number")
assert(type(y) == "number", "y is not a number")
return x%y
end
print(remainder(10))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

O código então chama a função restante com apenas um argumento, passando o valor 10. Como a função espera dois argumentos, o segundo argumento (y) é considerado nulo. Como resultado, a segunda função assert lança uma mensagem de erro “y is not a number”.

Função de erro

A função de erro em Lua gera um erro na função atual ou em uma função chamada.

A função recebe um argumento de string que especifica a mensagem de erro a ser exibida.

Quando ocorre um erro, a função de erro encerra a execução da função.

Aqui está a sintaxe para a função de erro:

error(message [, level])

O argumento da mensagem é obrigatório e deve ser uma string que descreva o erro.

O argumento de nível é opcional e deve ser um número inteiro que indica o nível no qual relatar o erro. Um valor de 1 (o padrão) indica a função atual, 2 indica o chamador da função atual e assim por diante.

Aqui está um exemplo de uso da função de erro:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local function remainder(x, y)
if y == 0 then
error("Division by zero is not allowed")
end
return x % y
end
-- calling the divide function with valid arguments
print(remainder(10, 3))
-- calling the divide function with invalid argument
print(remainder(10, 0))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

No exemplo acima, a função restante verifica se o segundo argumento y é zero. Se y for zero, a função gerará um erro usando a função de erro com a mensagem de erro “A divisão por zero não é permitida ”. Se y não for zero, a função retorna o resultado da operação do módulo.

Em Lua, o tratamento de erros é realizado usando as funções pcall() e xpcall() .


Lua pcall()

A função pcall() é uma função da biblioteca padrão Lua que permite chamar uma função e detectar quaisquer erros que possam ocorrer durante a execução.

A função pcall() recebe uma função e seus argumentos como entrada e retorna um valor booleano indicando se a função foi executada com sucesso ou não.

  • Se a função for executada com sucesso, pcall() retornará true e quaisquer valores que a função retornar.
  • Se a função encontrar um erro, pcall() retornará false e uma mensagem de erro.

O trecho de código a seguir ilustra o uso da função pcall() em Lua:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function remainder(x, y)
if y == 0 then
error("Attempt to divide by zero")
end
return x % y
end
-- Call divide() function with pcall() and handle errors
local success, result = pcall(remainder, 10, 0)
if not success then
print("Error: " .. result)
else
print("Result: " .. result)
end
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Lua xpcall()

A função xpcall() é uma versão mais avançada de pcall().

xpcall() permite que você especifique uma função de tratamento de erro que é chamada quando ocorre um erro.

A função de tratamento de erros recebe a mensagem de erro como um argumento.

O exemplo abaixo demonstra o uso da função xpcall() em Lua:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function remainder(x, y)
if y == 0 then
error("Attempt to divide by zero")
end
return x % y
end
-- Define error handling function
function errorHandler(err)
print("Error: " .. err)
end
-- Call divide() function with xpcall() and handle errors
local success, result = xpcall(remainder, errorHandler, 10, 0)
if success then
print("Result: " .. result)
end
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone