Исключения

Исключения

Модули 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
)