Saltar al contenido principal

Referencia de errores habituales durante la ejecución

Fragmento de descripción del errorCausaTratamiento
attempt to perform arithmetic on aSe intentó realizar una operación matemática (+、-、*、/) sobre un valor no numéricoAntes de la operación matemática, comprueba que todas las entradas sean números
attempt to compareSe intentó comparar valores no válidos (>、<、>=、<=)Antes de comparar, comprueba que ambos operandos se puedan comparar
attempt to concatenate aSe intentó concatenar (..) un valor que no es una cadenaAntes de concatenar, comprueba que ambos operandos sean cadenas
attempt to call aSe intentó llamar a una variable que no es una funciónAntes de llamar a una función, comprueba que sea una función
attempt to index aSe intentó indexar (operación de subíndice) una variable que no es una tablaAntes de obtener un valor de un arreglo o una tabla asociativa, comprueba que sea una tabla
attempt to yield across a C-call boundarySe intentó ceder en un bloque de llamada que no lo permiteAl hacer require de un módulo, comprueba que antes de que el módulo requerido devuelva no se llame a una función que pueda ceder (las funciones que pueden ceder llevan un signo de exclamación delante en el manual). Tampoco intentes usar funciones que puedan ceder en funciones con una devolución de llamada C (las funciones que pueden ceder llevan un signo de exclamación delante en el manual).
invalid order function for sortingFunción de ordenación no válida; suele ocurrir cuando la lógica de la regla de ordenación no es suficientemente claraAl llamar a la función de ordenación, define claramente la regla y no uses una regla en la que a > b y a < b sean verdaderas a la vez
bad argument #1 to 'xxx' (number expected, got nil)El tipo del argumento #1 al llamar a xxx no es correcto: se esperaba number pero se recibió nilError de argumento; pasa un argumento adecuado
bad argument #2 to 'xxx' (number has no integer representation)El argumento #2 al llamar a xxx no se puede convertir en enteroError de argumento; pasa un argumento adecuado
bad argument #3 to 'xxx'El argumento #3 al llamar a xxx no es válidoError de argumento; pasa un argumento adecuado
  • Solución provisional para el error attempt to yield across a C-call boundary al usar require: al cargar un módulo, comprueba que antes de que el módulo cargado mediante require devuelva el control no se llame a una función que pueda ceder (las funciones que pueden ceder llevan un signo de exclamación delante en el manual). Tampoco intentes usar funciones que puedan ceder en funciones con una devolución de llamada C (las funciones que pueden ceder llevan un signo de exclamación delante en el manual).
      1. Añade una línea return function() antes del código del módulo requerido
      1. Añade una línea end al final del código del módulo requerido
      1. Añade un par de paréntesis al final de require; por ejemplo, cambia require('A') por require('A')()