Содержание
- Lua Обработка ошибок
- Ошибка синтаксиса
- Ошибка выполнения
- Обработка ошибок
- функция ошибок
- PCALL и xpcall, отлаживать
- Ошибка: lua:103: unexpected symbol near ‘,’
- Вопрос
- SHANZIX 0
- Поделиться сообщением
- 3 ответа на этот вопрос
- Рекомендуемые сообщения
- Присоединяйтесь к обсуждению
- О нас
- Lua — Error Handling
- Complete Python Prime Pack for 2023
- Artificial Intelligence & Machine Learning Prime Pack
- Java Prime Pack 2023
- Need for Error Handling
- Syntax Errors
- Run Time Errors
- Assert and Error Functions
- pcall and xpcall
- Русские Блоги
- Обработка ошибок Lua
- Обработка ошибок Lua
- Грамматические ошибки
- Ошибка выполнения
- Обработка ошибок
- функция ошибки
- pcall и xpcall, отладка
- Lua Error Handling
- Grammatical errors
- Runtime Error
- Error Handling
- error function
- pcall and xpcall, debug
Lua Обработка ошибок
Программа обработки запуска ошибки необходимо, в нашей операции с файлами, передачи данных и веб-службы вызова будут появляться в самых неожиданных ошибок. Если вы не обратить внимание на дело с сообщениями об ошибках, в соответствии с информацией будет утечка, не может работать и так далее.
Любые языки программирования, требуется обработка ошибок. Типы ошибок являются:
- Ошибка синтаксиса
- Ошибка выполнения
Ошибка синтаксиса
Синтаксические ошибки, как правило, из-за компонентов программы (например, операторы, выражения), вызванные неправильным использованием. Простой пример выглядит следующим образом:
Приведенный выше код выполняется в результате:
Как вы можете видеть, было больше, чем за синтаксической ошибки, а «=» знак следуют два знака «=» отличается. А «=» является выражение присваивания два «=» является операция сравнения.
Выше программа появится следующие ошибки:
Ошибки синтаксиса проще, чем при запуске ошибка программы, ошибка запуска не удалось обнаружить конкретные ошибки, грамматические ошибки, которые мы можем быстро решить, например, приведенных выше примеров до тех пор, как мы делаем в заявлении для могут быть добавлены:
Ошибка выполнения
Запуск программы может выполнять ошибки нормально, но он выводит сообщение об ошибке. Ниже приведены примеры, так как входные параметры, ошибки, ошибки выполнения программы:
Когда мы скомпилировать и запустить следующий код, компилятор может быть успешным, но во время выполнения будет производить следующее сообщение об ошибке:
Следующее сообщение об ошибке вызвано тем, что программа не хватает параметра Ь.
Обработка ошибок
Мы можем использовать две функции: ошибки и утверждают для обработки ошибок. Примерами могут служить следующие:
Выше программа появится следующие ошибки:
Пример утверждают сначала проверяет первый аргумент, если нет проблем, утверждать ничего не делает, в противном случае, второй аргумент, чтобы утверждать сообщение об ошибке выбросили.
функция ошибок
: Завершает функцию которая выполняется, и возвращает содержимое сообщения в виде сообщения об ошибке (функция ошибки никогда не вернется)
Как правило, ошибка будет некоторая дополнительная информация о сообщении об ошибке в положении головы.
Параметр Level указывает положение, чтобы получить не так:
- Уровень = 1 [по умолчанию]: Для вызова ошибки (файл + номер строки)
- Level = 2: функция, которая вызывает функцию ошибки, указанную
- Уровень = 0: не добавляйте место ошибки
PCALL и xpcall, отлаживать
Lua обработка ошибок, вы можете использовать функцию PCALL (защищенный вызов), чтобы обернуть код, который будет выполнен.
PCALL получать функцию, и вы хотите передать параметр последнего, и выполняется, результат: есть ошибка, нет ошибки, или значение, возвращаемое истинным или ложным, errorinfo.
Синтаксис выглядит следующим образом
PCALL в «защищенном режиме», чтобы вызвать первый аргумент, поэтому PCALL функция захвата может выполнять какие-либо ошибки.
Как правило, при возникновении ошибки, она надеется, что в конечном итоге с большим количеством информации отладки, а не только там, где произошла ошибка. Но PCALL возвращается, она разрушила часть содержимого вызова Чжань.
Lua обеспечивает xpcall функцию, xpcall приема второго параметра — обработчик ошибок при возникновении ошибки, Lua обработчик ошибок будет вызываться перед вызовом Чжань шоу, чтобы увидеть (расслабиться), то вы можете использовать эту функцию в библиотеке отладки чтобы получить дополнительную информацию об ошибке.
отладки библиотека предоставляет два общих обработчика ошибок:
Источник
Ошибка: lua:103: unexpected symbol near ‘,’
Вопрос
SHANZIX 0
- Посетитель
- Пользователи 0
- 6 публикаций
Нашел админ-хелпер для сампа, решил переписать под другой сервер, выходит ошибка, не могу найти где именно. Помогите!
Где «******», это убрал название форума, дабы не было рекламы.
Изменено 29 августа, 2018 пользователем SHANZIX
оформление длинного кода
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
О нас
Проект ComputerCraft.ru основан в 2014 году. Особенностью наших игровых серверов является обязательное наличие компьютерных и технических модов и аддонов. Когда мод ComputerCraft устарел и больше не отвечал техническим требованиям, ему на замену пришел современный и высокотехнологичный мод OpenComputers. Черепашек заменили роботы из мода Opencomputers.
ComputerCraft.ru — это площадка для игры в Minecraft и общения на форуме, стабильные серверы и возможность в легкой и игровой форме обучиться программированию на языке Lua и реализовать все свои самые смелые инженерные идеи и решения и поделиться ими с другими игроками. За все время существования проекта сменилось 10 игровых серверов, которые посетили более 9000 игроков. На сайте собрано множество интересных программ и библиотек, статей, гайдов, веселых историй и горячих обсуждений, выдвинуто множество идей автоматизации и способов программирования.
У нас играют и пишут программы как новички так и опытные программисты. А самые продвинутые участники нашего коллектива даже разрабатывают собственные авторские моды и аддоны, ресурспаки, репозитории, мощнейшие библиотеки и операционные системы.
Регистрируйтесь прямо сейчас и присоединяйтесь к нашему дружному коллективу фанатов игры Minecraft , компьютерных и инженерных модов!
Источник
Lua — Error Handling
Complete Python Prime Pack for 2023
9 Courses 2 eBooks
Artificial Intelligence & Machine Learning Prime Pack
6 Courses 1 eBooks
Java Prime Pack 2023
8 Courses 2 eBooks
Need for Error Handling
Error handling is quite critical since real-world operations often require the use of complex operations, which includes file operations, database transactions and web service calls.
In any programming, there is always a requirement for error handling. Errors can be of two types which includes,
- Syntax errors
- Run time errors
Syntax Errors
Syntax errors occur due to improper use of various program components like operators and expressions. A simple example for syntax error is shown below.
As you know, there is a difference between the use of a single «equal to» and double «equal to». Using one instead of the other can lead to an error. One «equal to» refers to assignment while a double «equal to» refers to comparison. Similarly, we have expressions and functions having their predefined ways of implementation.
Another example for syntax error is shown below −
When we run the above program, we will get the following output −
Syntax errors are much easier to handle than run time errors since, the Lua interpreter locates the error more clearly than in case of runtime error. From the above error, we can know easily that adding a do statement before print statement is required as per the Lua structure.
Run Time Errors
In case of runtime errors, the program executes successfully, but it can result in runtime errors due to mistakes in input or mishandled functions. A simple example to show run time error is shown below.
When we build the program, it will build successfully and run. Once it runs, shows a run time error.
This is a runtime error, which had occurred due to not passing two variables. The b parameter is expected and here it is nil and produces an error.
Assert and Error Functions
In order to handle errors, we often use two functions − assert and error. A simple example is shown below.
When we run the above program, we will get the following error output.
The error (message [, level]) terminates the last protected function called and returns message as the error message. This function error never returns. Usually, error adds some information about the error position at the beginning of the message. The level argument specifies how to get the error position. With level 1 (the default), the error position is where the error function was called. Level 2 points the error to where the function that called error was called; and so on. Passing a level 0 avoids the addition of error position information to the message.
pcall and xpcall
In Lua programming, in order to avoid throwing these errors and handling errors, we need to use the functions pcall or xpcall.
The pcall (f, arg1, . ) function calls the requested function in protected mode. If some error occurs in function f, it does not throw an error. It just returns the status of error. A simple example using pcall is shown below.
When we run the above program, we will get the following output.
The xpcall (f, err) function calls the requested function and also sets the error handler. Any error inside f is not propagated; instead, xpcall catches the error, calls the err function with the original error object, and returns a status code.
A simple example for xpcall is shown below.
When we run the above program, we will get the following output.
As a programmer, it is most important to ensure that you take care of proper error handling in the programs you write. Using error handling can ensure that unexpected conditions beyond the boundary conditions are handled without disturbing the user of the program.
Источник
Русские Блоги
Обработка ошибок Lua
Обработка ошибок Lua
- Автор: Ян Мэн Ге
- Корректура: Чжай Шуцин
Обработка ошибок во время работы программы необходима. Непредсказуемые ошибки будут возникать во время файловых операций, передачи данных и вызовов веб-сервисов. Если вы не обращаете внимания на обработку информации об ошибках, это приведет к утечке информации, и программа не сможет работать.
В любом языке программирования требуется обработка ошибок. Типы ошибок:
- Грамматические ошибки
- Ошибка выполнения
Грамматические ошибки
Синтаксические ошибки обычно вызваны неправильным использованием компонентов программы (таких как операторы, выражения). Вот простой пример:
Результат выполнения приведенного выше кода:
Как видите, выше имеется грамматическая ошибка, есть разница между знаком «=» и двумя знаками «=». Один «=» — это выражение присваивания, а два «=» — операции сравнения.
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
Синтаксическая ошибка проще, чем ошибка работы программы. Ошибка операции не может найти конкретную ошибку, и синтаксическая ошибка может быть решена быстро. Как и в приведенном выше примере, нам нужно только добавить do под оператором for:
Ошибка выполнения
Ошибка выполнения означает, что программа может выполняться в обычном режиме, но будет выведено сообщение об ошибке. В следующем примере сообщается об ошибке во время выполнения программы из-за ошибок ввода параметров:
Когда мы компилируем и запускаем следующий код, компиляция может быть успешной, но при запуске будет сгенерирована следующая ошибка:
Следующее сообщение об ошибке вызвано отсутствием в программе параметров b.
Обработка ошибок
Мы можем использовать две функции: assert и error для обработки ошибок. Вот примеры:
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
В этом примере assert сначала проверяет первый параметр. Если проблем нет, assert ничего не делает; в противном случае assert использует второй параметр как сообщение об ошибке.
функция ошибки
Функция: завершить выполняемую функцию и вернуть содержимое сообщения как сообщение об ошибке (функция ошибки никогда не вернет)
В нормальных условиях error добавляет некоторую информацию о местоположении ошибки в заголовок сообщения.
Параметр Level указывает место ошибки:
- Уровень = 1 [по умолчанию]: позиция ошибки вызова (файл + номер строки)
- Уровень = 2: укажите, какая функция вызывает функцию ошибки.
- Уровень = 0: не добавлять информацию о местоположении ошибки
pcall и xpcall, отладка
Для обработки ошибок в Lua вы можете использовать функцию pcall (защищенный вызов), чтобы обернуть код, который необходимо выполнить.
pcall получает функцию и параметры, которые должны быть переданы последней, и выполняет ее.Результат выполнения: ошибка или нет ошибки; возвращаемое значение true или false, errorinfo.
Формат синтаксиса следующий
pcall вызывает первый параметр в «защищенном режиме», поэтому pcall может отловить любые ошибки при выполнении функции.
Обычно, когда возникает ошибка, вам нужна дополнительная отладочная информация, а не только местонахождение ошибки. Но когда pcall возвращается, он уничтожает часть содержимого вызывающего.
Lua предоставляет функцию xpcall, xpcall получает второй параметр — функцию обработки ошибок, при возникновении ошибки Lua вызовет функцию обработки ошибок перед вызовом размотки, поэтому вы можете использовать библиотеку отладки в этой функции. Получить дополнительную информацию об ошибке. Библиотека отладки предоставляет две общие функции обработки ошибок:
- debug.debug: предоставить пользователям Lua приглашение проверить причину ошибки.
- debug.traceback: создать расширенное сообщение об ошибке на основе вызова
Пример использования xpcall 2:
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
Источник
Lua Error Handling
Program run error handling is necessary, in our file operations, data transfer and web service invocation will appear in unexpected errors. If you do not pay attention to deal with error messages, according to the information will leak, can not run and so on.
Any programming languages, error handling is required. Error types are:
- Grammatical errors
- Runtime Error
Grammatical errors
Syntax errors are usually due to the program’s components (such as operators, expressions) caused by improper use. A simple example is as follows:
The above code is executed as a result of:
As you can see, there have been more than a syntax error, a «=» sign followed by two «=» sign is different. A «=» is the assignment expression two «=» is the comparison operation.
The above program will appear the following errors:
Syntax errors is easier than running a program error, run error unable to locate the specific errors, grammatical mistakes that we can quickly resolve, such as the above examples as long as we do in the for statement can be added:
Runtime Error
Run the program can perform error is normal, but it will output an error message. The following examples because the parameters input errors, program execution error:
When we compile and run the following code, the compiler can be successful, but at run time will produce the following error:
The following error message is caused because the program lacks the b parameter.
Error Handling
We can use two functions: assert and error to handle errors. Examples are as follows:
The above program will appear the following errors:
Example assert first checks the first argument, if no problem, assert does nothing; otherwise, the second argument as to assert error message thrown.
error function
: Terminates the function being executed, and returns the contents of the message as the error message (error function will never return)
Typically, error will be some additional information about the error message to the head position.
Level parameter indicates the position to get wrong:
- Level = 1 [default]: To call error (file + line number)
- Level = 2: function which calls the error function indicated
- Level = 0: do not add error location
pcall and xpcall, debug
Lua error handling, you can use the function pcall (protected call) to wrap the code to be executed.
pcall receiving a function and you want to pass a parameter of the latter, and executed, the result: there is an error, no error; or the return value of true or false, errorinfo.
Syntax is as follows
pcall in a «protected mode» to call the first argument, therefore pcall capture function can perform any errors.
Typically when an error occurs, it is hoping to end up with more debugging information, not just where the error occurred. But pcall returns, it has destroyed part of the contents of the call Zhan.
Lua provides xpcall function, xpcall receiving a second parameter — an error handler when an error occurs, Lua error handler will be called before calling Zhan show to see (unwind), then you can use this function in debug library to obtain additional information about the error.
debug library provides two generic error handler:
- debug.debug: Lua provide a prompt, allowing users to spread the wrong reasons
- debug.traceback: According to Zhan call to build an extended error message
> = Xpcall (function (i) print (i) error ( ‘error ..’) end, function () print (debug.traceback ()) end, 33) 33 stack traceback: stdin: 1: in function [C]: in function ‘error’ stdin: 1: in function [C]: in function ‘xpcall’ stdin: 1: in main chunk [C]:? In false nil
xpcall Example 2:
The above program will appear the following errors:
Источник
Программа обработки запуска ошибки необходимо, в нашей операции с файлами, передачи данных и веб-службы вызова будут появляться в самых неожиданных ошибок. Если вы не обратить внимание на дело с сообщениями об ошибках, в соответствии с информацией будет утечка, не может работать и так далее.
Любые языки программирования, требуется обработка ошибок. Типы ошибок являются:
- Ошибка синтаксиса
- Ошибка выполнения
Ошибка синтаксиса
Синтаксические ошибки, как правило, из-за компонентов программы (например, операторы, выражения), вызванные неправильным использованием. Простой пример выглядит следующим образом:
-- test.lua 文件 a == 2
Приведенный выше код выполняется в результате:
lua: test.lua:2: syntax error near '=='
Как вы можете видеть, было больше, чем за синтаксической ошибки, а «=» знак следуют два знака «=» отличается. А «=» является выражение присваивания два «=» является операция сравнения.
Другой пример:
for a= 1,10 print(a) end
Выше программа появится следующие ошибки:
lua: test2.lua:2: 'do' expected near 'print'
Ошибки синтаксиса проще, чем при запуске ошибка программы, ошибка запуска не удалось обнаружить конкретные ошибки, грамматические ошибки, которые мы можем быстро решить, например, приведенных выше примеров до тех пор, как мы делаем в заявлении для могут быть добавлены:
for a= 1,10 do print(a) end
Ошибка выполнения
Запуск программы может выполнять ошибки нормально, но он выводит сообщение об ошибке. Ниже приведены примеры, так как входные параметры, ошибки, ошибки выполнения программы:
function add(a,b) return a+b end add(10)
Когда мы скомпилировать и запустить следующий код, компилятор может быть успешным, но во время выполнения будет производить следующее сообщение об ошибке:
lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value) stack traceback: test2.lua:2: in function 'add' test2.lua:5: in main chunk [C]: ?
Следующее сообщение об ошибке вызвано тем, что программа не хватает параметра Ь.
Обработка ошибок
Мы можем использовать две функции: ошибки и утверждают для обработки ошибок. Примерами могут служить следующие:
local function add(a,b) assert(type(a) == "number", "a 不是一个数字") assert(type(b) == "number", "b 不是一个数字") return a+b end add(10)
Выше программа появится следующие ошибки:
lua: test.lua:3: b 不是一个数字 stack traceback: [C]: in function 'assert' test.lua:3: in local 'add' test.lua:6: in main chunk [C]: in ?
Пример утверждают сначала проверяет первый аргумент, если нет проблем, утверждать ничего не делает, в противном случае, второй аргумент, чтобы утверждать сообщение об ошибке выбросили.
функция ошибок
Синтаксис:
error (message [, level])
: Завершает функцию которая выполняется, и возвращает содержимое сообщения в виде сообщения об ошибке (функция ошибки никогда не вернется)
Как правило, ошибка будет некоторая дополнительная информация о сообщении об ошибке в положении головы.
Параметр Level указывает положение, чтобы получить не так:
- Уровень = 1 [по умолчанию]: Для вызова ошибки (файл + номер строки)
- Level = 2: функция, которая вызывает функцию ошибки, указанную
- Уровень = 0: не добавляйте место ошибки
PCALL и xpcall, отлаживать
Lua обработка ошибок, вы можете использовать функцию PCALL (защищенный вызов), чтобы обернуть код, который будет выполнен.
PCALL получать функцию, и вы хотите передать параметр последнего, и выполняется, результат: есть ошибка, нет ошибки, или значение, возвращаемое истинным или ложным, errorinfo.
Синтаксис выглядит следующим образом
if pcall(function_name, ….) then -- 没有错误 else -- 一些错误 end
Простой пример:
> =pcall(function(i) print(i) end, 33) 33 true > =pcall(function(i) print(i) error('error..') end, 33) 33 false stdin:1: error..
> function f() return false,2 end > if f() then print '1' else print '0' end 0
PCALL в «защищенном режиме», чтобы вызвать первый аргумент, поэтому PCALL функция захвата может выполнять какие-либо ошибки.
Как правило, при возникновении ошибки, она надеется, что в конечном итоге с большим количеством информации отладки, а не только там, где произошла ошибка. Но PCALL возвращается, она разрушила часть содержимого вызова Чжань.
Lua обеспечивает xpcall функцию, xpcall приема второго параметра — обработчик ошибок при возникновении ошибки, Lua обработчик ошибок будет вызываться перед вызовом Чжань шоу, чтобы увидеть (расслабиться), то вы можете использовать эту функцию в библиотеке отладки чтобы получить дополнительную информацию об ошибке.
отладки библиотека предоставляет два общих обработчика ошибок:
- debug.debug: Lua обеспечивают подсказку, что позволяет пользователям распространять неправильные причины
- debug.traceback: Согласно Чжань вызова построить расширенное сообщение об ошибке
> = Xpcall (функция (я) печати (я) ошибка ( ‘ошибка ..’) конец, функция () печати (debug.traceback)) конец (33) 33 стопка отслеживающий: STDIN: 1: в функции [C]: в функции ‘ошибки’ STDIN: 1: в функции [C]: в функции ‘xpcall’ STDIN: 1: в главном фрагменте [C] В ложном нолю
xpcall Пример 2:
function myfunction () n = n/nil end function myerrorhandler( err ) print( "ERROR:", err ) end status = xpcall( myfunction, myerrorhandler ) print( status)
Выше программа появится следующие ошибки:
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value) false
Need for Error Handling
Error handling is quite critical since real-world operations often require the use of complex operations, which includes file operations, database transactions and web service calls.
In any programming, there is always a requirement for error handling. Errors can be of two types which includes,
- Syntax errors
- Run time errors
Syntax Errors
Syntax errors occur due to improper use of various program components like operators and expressions. A simple example for syntax error is shown below.
a == 2
As you know, there is a difference between the use of a single «equal to» and double «equal to». Using one instead of the other can lead to an error. One «equal to» refers to assignment while a double «equal to» refers to comparison. Similarly, we have expressions and functions having their predefined ways of implementation.
Another example for syntax error is shown below −
for a= 1,10 print(a) end
When we run the above program, we will get the following output −
lua: test2.lua:2: 'do' expected near 'print'
Syntax errors are much easier to handle than run time errors since, the Lua interpreter locates the error more clearly than in case of runtime error. From the above error, we can know easily that adding a do statement before print statement is required as per the Lua structure.
Run Time Errors
In case of runtime errors, the program executes successfully, but it can result in runtime errors due to mistakes in input or mishandled functions. A simple example to show run time error is shown below.
function add(a,b) return a+b end add(10)
When we build the program, it will build successfully and run. Once it runs, shows a run time error.
lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value) stack traceback: test2.lua:2: in function 'add' test2.lua:5: in main chunk [C]: ?
This is a runtime error, which had occurred due to not passing two variables. The b parameter is expected and here it is nil and produces an error.
Assert and Error Functions
In order to handle errors, we often use two functions − assert and error. A simple example is shown below.
local function add(a,b) assert(type(a) == "number", "a is not a number") assert(type(b) == "number", "b is not a number") return a+b end add(10)
When we run the above program, we will get the following error output.
lua: test2.lua:3: b is not a number stack traceback: [C]: in function 'assert' test2.lua:3: in function 'add' test2.lua:6: in main chunk [C]: ?
The error (message [, level]) terminates the last protected function called and returns message as the error message. This function error never returns. Usually, error adds some information about the error position at the beginning of the message. The level argument specifies how to get the error position. With level 1 (the default), the error position is where the error function was called. Level 2 points the error to where the function that called error was called; and so on. Passing a level 0 avoids the addition of error position information to the message.
pcall and xpcall
In Lua programming, in order to avoid throwing these errors and handling errors, we need to use the functions pcall or xpcall.
The pcall (f, arg1, …) function calls the requested function in protected mode. If some error occurs in function f, it does not throw an error. It just returns the status of error. A simple example using pcall is shown below.
function myfunction () n = n/nil end if pcall(myfunction) then print("Success") else print("Failure") end
When we run the above program, we will get the following output.
Failure
The xpcall (f, err) function calls the requested function and also sets the error handler. Any error inside f is not propagated; instead, xpcall catches the error, calls the err function with the original error object, and returns a status code.
A simple example for xpcall is shown below.
function myfunction () n = n/nil end function myerrorhandler( err ) print( "ERROR:", err ) end status = xpcall( myfunction, myerrorhandler ) print( status)
When we run the above program, we will get the following output.
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value) false
As a programmer, it is most important to ensure that you take care of proper error handling in the programs you write. Using error handling can ensure that unexpected conditions beyond the boundary conditions are handled without disturbing the user of the program.
Syntax Errors
A syntax error will appear when the Lua syntax has been violated, which will result in a error at runtime.
These work similar to the diagnostics.
List of all syntax errors
Below is a list of all of the possible syntax errors that can be reported by the language server:
action-after-return
Triggered when there is unreachable code after a return
— which is invalid Lua.
args-after-dots
Triggered when there is a parameter defined after a variable arguments symbol (...
) — which is invalid Lua.
block-after-else
Triggered when there is a else
or elseif
after a terminating else
in an if
statement — which is invalid Lua.
if myVar then print("Truthy") else print("Falsy") elseif nil then --Error! end
break-outside
Triggered when a break
is placed outside of a break
-able loop — which is invalid Lua.
err-assign-as-eq
Triggered when using the equality symbol (==
) to assign a variable. You should instead use the assignment symbol =
.
err-c-long-comment
Triggered when using /** */
for multi-line comments instead of --[[ ]]
, as required by Lua’s syntax. You should instead use --[[ ]]
for your multi-line comments.
err-comment-prefix
Triggered when using //
for comments instead of --
, as required by Lua’s syntax. You should instead use --
for your comments and ---
for your annotations.
err-do-as-then
Triggered when using then
instead of do
for a while
loop.
err-eq-as-assign
Triggered when using the assignment symbol (=
) to test equality. You should instead use the equality symbol ==
.
err-esc
Triggered when an unknown escape sequence is found, such as "c"
.
err-nonstandard-symbol
Triggered when using a non-Lua symbol like &&
instead of and
or ||
instead of or
.
err-then-as-do
Triggered when using do
instead of then
in an if
statement.
exp-in-action
Triggered when there is an unexpected expression like in local 3 + 2 = 10
— there is an unexpected expression during an assignment action.
index-in-func-name
Triggered when there is an indexing operation taking place in a function’s name e.g. function myTable[1]() end
.
jump-local-scope
Triggered when a local variable is «jumped» over using goto
and labels. «jumping» the variable means it is never defined and will cause errors when it is referenced. This diagnostic serves to protect against such errors.
goto jump local a = 10 ::jump:: -- a is jumped over by this label, -- meaning it is never defined print(a)
keyword
Triggered when using a reserved keyword as a name e.g. local true = "hello"
.
local-limit
Triggered when the limit for local
variables has been reached in this scope. Lua has a hard-coded limit of 200 local variables in each scope.
malformed-number
Triggered when a malformed number is found like 0y16
instead of 0x16
or 0.0.4
.
miss-end
Triggered when an end
is missing from an if
, for
, while
, or function
. This is usually due to nesting and a matching end
is missing from an outer if
, for
, etc.
miss-esc-x
Triggered when the hexadecimal digits are missing from an x
hexadecimal escape.
miss-exp
Triggered when an expression is missing from your code. For example, forgetting the expression to an if statement, i.e. if then end
.
miss-exponent
Triggered when the exponent has been left out when representing a number in exponent form.
local incorrect = 1e local correct = 1e10
miss-field
Triggered when a field reference is underway but no field name has been given e.g. print(myTable.)
.
miss-loop-max
Triggered when the maximum (limit) to a for
loop is not provided.
miss-loop-min
Triggered when the minimum (start) to a for
loop is not provided.
miss-method
Triggered when a method (:
) is being called but the method name is not provided e.g. Class:
.
miss-name
Triggered when the name is missing to a function/method.
miss-sep-in-table
Triggered when a separator (,
or ;
) is missing from a table.
miss-space-between
🚧 Description needed 🚧
miss-symbol
🚧 Description needed 🚧
set-const
🚧 Description needed 🚧
unexpect-dots
Triggered when using the variable arguments symbol (...
) outside of a function that has variable arguments.
unexpect-efunc-name
Triggered when a function is being assigned to a variable and is also given a name.
local x = function x() end
unexpect-lfunc-name
Triggered when a function is marked as local. The method either belongs to a table or is a local function, not both.
unexpect-symbol
🚧 Description needed 🚧
unicode-name
Triggered when a variable name contains unicode characters. Unicode characters can be allowed by disabling this diagnostic or by enabling Lua.runtime.unicodeName
.
unknown-attribute
🚧 Description needed 🚧
unknown-symbol
Triggered when an unknown symbols is found like in local a = &
. A simple syntax error, most likely a typo.
Обработка ошибок Lua
- Автор: Ян Мэн Ге
- Корректура: Чжай Шуцин
Обработка ошибок во время работы программы необходима. Непредсказуемые ошибки будут возникать во время файловых операций, передачи данных и вызовов веб-сервисов. Если вы не обращаете внимания на обработку информации об ошибках, это приведет к утечке информации, и программа не сможет работать.
В любом языке программирования требуется обработка ошибок. Типы ошибок:
- Грамматические ошибки
- Ошибка выполнения
Грамматические ошибки
Синтаксические ошибки обычно вызваны неправильным использованием компонентов программы (таких как операторы, выражения). Вот простой пример:
- файл test.lua
a == 2
Результат выполнения приведенного выше кода:
lua: test.lua:2: syntax error near '=='
Как видите, выше имеется грамматическая ошибка, есть разница между знаком «=» и двумя знаками «=». Один «=» — это выражение присваивания, а два «=» — операции сравнения.
Другой пример:
for a= 1,10
print(a)
end
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
lua: test2.lua:2: 'do' expected near 'print'
Синтаксическая ошибка проще, чем ошибка работы программы. Ошибка операции не может найти конкретную ошибку, и синтаксическая ошибка может быть решена быстро. Как и в приведенном выше примере, нам нужно только добавить do под оператором for:
for a= 1,10
do
print(a)
end
Ошибка выполнения
Ошибка выполнения означает, что программа может выполняться в обычном режиме, но будет выведено сообщение об ошибке. В следующем примере сообщается об ошибке во время выполнения программы из-за ошибок ввода параметров:
function add(a,b)
return a+b
end
add(10)
Когда мы компилируем и запускаем следующий код, компиляция может быть успешной, но при запуске будет сгенерирована следующая ошибка:
lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value)
stack traceback:
test2.lua:2: in function 'add'
test2.lua:5: in main chunk
[C]: ?
Следующее сообщение об ошибке вызвано отсутствием в программе параметров b.
Обработка ошибок
Мы можем использовать две функции: assert и error для обработки ошибок. Вот примеры:
local function add(a,b)
assert (type (a) == "число", "a не число")
assert (type (b) == "число", "b не число")
return a+b
end
add(10)
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
lua: test.lua: 3: b не является числом
stack traceback:
[C]: in function 'assert'
test.lua:3: in local 'add'
test.lua:6: in main chunk
[C]: in ?
В этом примере assert сначала проверяет первый параметр. Если проблем нет, assert ничего не делает; в противном случае assert использует второй параметр как сообщение об ошибке.
функция ошибки
Формат синтаксиса:
error (message [, level])
Функция: завершить выполняемую функцию и вернуть содержимое сообщения как сообщение об ошибке (функция ошибки никогда не вернет)
В нормальных условиях error добавляет некоторую информацию о местоположении ошибки в заголовок сообщения.
Параметр Level указывает место ошибки:
- Уровень = 1 [по умолчанию]: позиция ошибки вызова (файл + номер строки)
- Уровень = 2: укажите, какая функция вызывает функцию ошибки.
- Уровень = 0: не добавлять информацию о местоположении ошибки
pcall и xpcall, отладка
Для обработки ошибок в Lua вы можете использовать функцию pcall (защищенный вызов), чтобы обернуть код, который необходимо выполнить.
pcall получает функцию и параметры, которые должны быть переданы последней, и выполняет ее.Результат выполнения: ошибка или нет ошибки; возвращаемое значение true или false, errorinfo.
Формат синтаксиса следующий
if pcall(function_name, ….) then
- ошибок нет
else
-- некоторые ошибки
end
Простой пример:
> =pcall(function(i) print(i) end, 33)
33
true
> =pcall(function(i) print(i) error('error..') end, 33)
33
false stdin:1: error..
> function f() return false,2 end
> if f() then print '1' else print '0' end
0
pcall вызывает первый параметр в «защищенном режиме», поэтому pcall может отловить любые ошибки при выполнении функции.
Обычно, когда возникает ошибка, вам нужна дополнительная отладочная информация, а не только местонахождение ошибки. Но когда pcall возвращается, он уничтожает часть содержимого вызывающего.
Lua предоставляет функцию xpcall, xpcall получает второй параметр — функцию обработки ошибок, при возникновении ошибки Lua вызовет функцию обработки ошибок перед вызовом размотки, поэтому вы можете использовать библиотеку отладки в этой функции. Получить дополнительную информацию об ошибке. Библиотека отладки предоставляет две общие функции обработки ошибок:
- debug.debug: предоставить пользователям Lua приглашение проверить причину ошибки.
- debug.traceback: создать расширенное сообщение об ошибке на основе вызова
>=xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)
33
stack traceback:
stdin:1: in function <stdin:1>
[C]: in function 'error'
stdin:1: in function <stdin:1>
[C]: in function 'xpcall'
stdin:1: in main chunk
[C]: in ?
false nil
Пример использования xpcall 2:
function myfunction ()
n = n/nil
end
function myerrorhandler( err )
print( "ERROR:", err )
end
status = xpcall( myfunction, myerrorhandler )
print( status)
При выполнении вышеуказанной процедуры произойдет следующая ошибка:
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value)
false