Статья Сборник lua ошибок и их решение

  • 246
  • 13
  • 45
В этой статье я хочу выложить список некоторых возможных ошибок при работе с кодом в Glua и как их решать.

GMOD WIKI
Формат ошибок Lua
Первая строка Lua-ошибки содержит 3 важных фрагмента информации:

  • Путь к файлу, вызывающему ошибку
  • Строка, вызвавшая ошибку
  • Сама ошибка
Приведем пример кода, вызывающего ошибку:

xd:
local text = "Hello World"

Print( text )

Этот код приведет к следующей ошибке:

[ERROR] addons/my_addon/lua/autorun/server/sv_my_addon_autorun.lua:2: attempt to call global 'Print' (a nil value)
1. unknown - addons/my_addon/lua/autorun/server/sv_my_addon_autorun.lua:2


Это связано с тем, что Print не является существующей функцией (print, однако, существует).

В первой строке указан путь к файлу, вызывающему ошибку - addons/my_addon/lua/autorun/server/sv_my_addon_autorun.lua
Далее следует строка, вызывающая ошибку - sv_my_addon_autorun.lua:2 (line 2)

И, наконец, сама ошибка - попытка вызова глобальной функции 'Print' (значение nil)


Под ошибкой находится трассировка функции. Упрощённо - если ошибка находится внутри функции/фрагмента кода, который вызывается из другого места, то будет указано, откуда вызывается код.

Если ошибка произошла на стороне сервера, то цвет текста будет синим. Если ошибка произошла на стороне клиента, то цвет текста будет желтым. Если это код меню, то он будет зеленым (не типичный сценарий). Сообщения, которые выглядят как ошибки, но окрашены в другой цвет, например, красный или белый, являются не ошибками Lua, а ошибками движка.
Распространенные ошибки:

Attempt to call global '?' a nil value

- Вы попытались вызвать несуществующую функцию.

Способы исправления:
Убедитесь, что функция существует
Убедитесь, что функция определена в правильной области
Проверьте вызовы функций на наличие орфографических ошибок
Попытка выполнить арифметические действия над глобальным '?' (нулевым значением)
Вы попытались выполнить арифметические действия (+, -, *, /) над глобальной переменной, которая не определена.

Возможные причины:
Вы попытались использовать локальную переменную, которая была определена позже в коде
Вы неправильно указали имя глобальной переменной.


Attempt to perform arithmetic on global '?' (a nil value)

Вы попытались выполнить арифметические действия (+, -, *, /) над переменной, которая не может выполнять арифметические действия. (например, 2 + "строка").

Attempt to index global 'varname' (a nil value)

Вы попытались проиндексировать неопределенную переменную (например, print( variable.index ), где variable не определена)

Возможные причины:
Переменная определена в другой области
Переменная является локальной и определена позже в коде
Вы неправильно указали имя переменной.

Способы исправления:
Убедитесь, что доступ к переменной осуществляется только в той области, в которой она была определена.
Если переменная является локальной, определите ее перед обращением к ней


Malformed number near 'number'

В коде присутствует некорректное число (например, 1.2.3, 2f)

Возможные причины:
При запрашивании IP-адрес был записан как число, а не как строка.
Неправильная запись умножения числа и переменной
Попытка конкатенации числа в строку без пробела между числом и оператором.

Способы исправления:
Хранить IP-адреса в виде строки
Умножать переменные на числа с помощью оператора *
Поставьте пробел между конкатенацией и числом.


Unexpected symbol near 'symbol'

Вы ввели в код символ, который Lua не знает, как интерпретировать.

Возможные причины:
Неправильный синтаксис (например, забыли написать "then" после оператора if).
Не закрыты скобки и круглые скобки в нужных местах.

Способы исправления:
Убедитесь, что в коде нет ошибок.
Правильно закрывайте скобки и круглые скобки


'symbol1' expected near 'symbol2'

Lua ожидала увидеть символ1 вместо символа2. Когда 'symbol2' имеет значение <eof>, Lua ожидала символ перед концом файла

Возможные причины:
Не закрыты все скобки, круглые скобки или функции до конца файла
Слишком много операторов end
Неправильный вызов оператора (например, "==" вместо "=")
Отсутствие запятой после элемента таблицы.

Способы исправления:
Правильно закрывайте скобки и круглые скобки (см.: Отступы в коде).
Использовать правильные операторы
Добавить запятую после элемента таблицы


Couldn't include file 'file' - File not found (<nowhere>)

Файловая система попыталась включить файл, который либо не существует, либо был добавлен во время работы сервера. Эта ошибка также может быть ошибкой AddCSLuaFile.

Возможные причины:
Попытка включения / AddCSLuaFile несуществующего или пустого файла.
Создание файла во время работы сервера.

Способы устранения:
Добавить существующий файл, убедиться, что файл не пуст
Перезапустить сервер


Attempted request to known malicious code endpoint! Blocking!
Это ошибка оповещает что на вашем сервере замечен известный вирусный код.

Чаще всего, это оповещение что на вашем сервере скорее всего kvacdoor или удалённо управляемый эксплоит.
Проверьте файлы вашего сервера на вредоносный код.


Остальные ошибки *ТЫК*
 
Активность
Пока что здесь никого нет
Сверху Снизу