Исключения
Модули Lua могут вызывать исключения (аномальные или исключительные условия, требующие специальной обработки). В общем случае исключение нарушает нормальный ход выполнения и запускает зарегистрированный обработчик исключений, который останавливает программу. Например, если вы попытаетесь запустить сетевой интерфейс Wi-Fi, не настроив его, произойдет следующее:
/ > net.wf.start()
stdin:1: 117440517:wifi is not setup
stack traceback:
[C]: in field 'start'
stdin:1: in main chunk
[C]: in ?
/ >
Lua RTOS поддерживает модель обработки исключений try / catch / finally. Эта модель позволяет выполнять код Lua, который потенциально может вызвать исключение (часть try), обрабатывать исключения без остановки программы (часть catch) и продолжать нормальное выполнение программы независимо от того, произошло ли исключение (часть finally).
try(try_function, [catch_function, finally_function])
Эта функция позволяет выполнить функцию, которая потенциально может вызывать исключения и перехватывать ошибки выполнения без остановки программы.
Программы, написанные с использованием функции try, более читаемы, поэтому не нужно использовать схему “if then else” для проверки ошибок.
Аргументы:
- try_function: функция Lua, содержащая код, который потенциально может вызвать исключения.
- catch_function (необязательно): функция Lua, которая вызывается, когда происходит исключение.
- finally_function (необязательно): функция Lua, которая всегда вызывается после завершения работы функций try_function или catch_function.
Возвращает: ничего.
try(
function()
-- This function executes the code that potentially throws exceptions
end,
function(where, line, error, message)
-- This function is executed when an exception is thrown
end,
function()
-- This function is called always
end
)
try(
function()
net.wf.start()
end,
function(where, line, error, message)
if (error == 117440517) then
print(message)
end
end,
function()
net.wf.stop()
end
)