Pular para o conteúdo principal

Referência de erros comuns em tempo de execução

Trecho da descrição do erroCausaComo tratar
attempt to perform arithmetic on aTentativa de fazer uma operação matemática com um valor não numérico (+、-、*、/)Antes da operação matemática, verifique se todas as entradas são números.
attempt to compareTentativa de comparar um valor inválido (>、<、>=、<=)Antes da comparação, verifique se os dois valores podem ser comparados.
attempt to concatenate aTentativa de concatenar um valor que não é string (..)Antes de concatenar, confirme que os dois valores são strings.
attempt to call aTentativa de chamar uma variável que não é uma funçãoAntes de chamar uma função, confirme que o valor é uma função.
attempt to index aTentativa de indexar uma variável que não é uma tabela (operação de índice)Antes de obter um valor de um array ou de uma tabela associativa, confirme que ele é uma tabela.
attempt to yield across a C-call boundaryTentativa de ceder a execução em um bloco de chamada que não permite issoAo usar require para carregar um módulo, confirme que o módulo carregado não chama uma função que cede a execução (marcada com um ponto de exclamação no manual) antes de retornar. Também não tente usar uma função que cede a execução (marcada com um ponto de exclamação no manual) em uma função que tenha um callback C.
invalid order function for sortingFunção de ordenação inválida, geralmente causada por uma lógica de comparação pouco claraAo chamar a função de ordenação, defina claramente a regra e não use uma regra em que a > b e a < b sejam verdadeiras ao mesmo tempo.
bad argument #1 to 'xxx' (number expected, got nil)Ao chamar xxx, o tipo do argumento #1 está incorreto: esperava-se number, mas foi passado nilErro de argumento; passe um argumento adequado.
bad argument #2 to 'xxx' (number has no integer representation)Ao chamar xxx, o argumento #2 não pode ser convertido em inteiroErro de argumento; passe um argumento adequado.
bad argument #3 to 'xxx'O argumento #3 de xxx é inválidoErro de argumento; passe um argumento adequado.
  • Solução provisória para o erro attempt to yield across a C-call boundary ao usar require um módulo carregado por require
      1. Adicione a linha return function() antes do código do módulo usado por require.
      1. Adicione a linha end ao final do código do módulo usado por require.
      1. Ao chamar require, adicione um par de parênteses, por exemplo, altere require('A') para require('A')().