Перейти к основному содержимому

Справочник распространённых ошибок выполнения

Фрагмент описания ошибкиПричинаСпособ устранения
attempt to perform arithmetic on aПопытка выполнить математическую операцию над нечисловым значением (+, -, *, /)Перед математической операцией убедитесь, что все входные значения являются числами
attempt to compareПопытка сравнить недопустимые значения (операции >, <, >= и <=)Перед сравнением убедитесь, что оба входных значения можно сравнить
attempt to concatenate aПопытка выполнить конкатенацию нестрокового значения (..)Перед конкатенацией убедитесь, что оба значения являются строками
attempt to call aПопытка вызвать переменную, которая не является функциейПеред вызовом убедитесь, что значение является функцией
attempt to index aПопытка проиндексировать переменную, не являющуюся таблицей (операция индексации)Перед чтением значения из массива или ассоциативного массива убедитесь, что это таблица
attempt to yield across a C-call boundaryПопытка уступить управление в блоке вызова, который этого не допускаетПри вызове require для модуля убедитесь, что модуль, подключаемый через require, до возврата не вызывает функции, уступающие управление (перед такими функциями в руководстве стоит восклицательный знак). Также не используйте функции, уступающие управление, внутри функции с обратным вызовом C (перед такими функциями в руководстве стоит восклицательный знак).
invalid order function for sortingНедопустимая функция сравнения, обычно из-за неоднозначной логики сортировкиПри вызове сортировки задайте однозначное правило: не допускайте ситуации, когда одновременно выполняются условия a больше b и a меньше b
bad argument #1 to 'xxx' (number expected, got nil)При вызове xxx тип аргумента #1 неверен: ожидалось число, но передано nilИсправьте аргумент и передайте подходящее значение
bad argument #2 to 'xxx' (number has no integer representation)При вызове xxx аргумент #2 нельзя преобразовать в целое числоИсправьте аргумент и передайте подходящее значение
bad argument #3 to 'xxx'При вызове xxx аргумент #3 недопустимИсправьте аргумент и передайте подходящее значение
  • Временное решение для ошибки attempt to yield across a C-call boundary при использовании require:
      1. Добавьте строку return function() перед кодом подключаемого модуля.
      1. Добавьте строку end в конце кода подключаемого модуля.
      1. При вызове require добавьте ещё одну пару скобок, например замените require('A') на require('A')().