Обработать исключение для включаемого файла через dofile

Страницы: 1
RSS
Обработать исключение для включаемого файла через dofile
 
Есть файл №2 со скриптом Lua подключаемый в основной скрипт Lua №1 через dofile().
Можно как-то создать исключение если в этом файле №2 есть ошибка - проигнорировать его и не прерывать работу скрипта №1.
Проводимые вычисления и операции в скрипте №2 никак не затрагивают работу скрипта №1.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Нашел в сети два варианта как это сделать:
Код
Функция  pcall вызывает функцию f с аргументами, переданными в параметрах и возвращает результат успешности вызова функции. Если функция f была вызвана успешно, то остальные возвращаемые значения pcall являются результатом вызова функции f, иначе второе возвращаемое значение является сообщением об ошибке. Например:

local callResult, result = pcall(dofile, fileName)
if callResult then
    -- все в порядке, result это то, что вернула функция dofile
else
    -- result это сообщение об ошибке
    print(result)
end

Второй способ загрузки файла использует переключение окружения и уже знакомую функцию loadfile:

-- загружаем чанк из файла
local result
local func, errorMsg = loadfile('data2.lua')
if func then
  -- создаем таблицу для окружения,
  -- в котором будет выполняться функция func
  local P = {}
  -- устанавливаем окружение для функции func
  setfenv(func, P)
  -- вызываем функцию func
  func()
  -- все "глобальные" переменные,
  -- объявленные внутри чанка, попадут в таблицу P
  result = P.a
else
  print(errorMsg)
end
Но хотелось бы понимать чем они отличаются друг от друга. :lol:  
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Второй метод спасет только от формальных синтаксических ошибок в коде.
Если синтаксически код корректен, но возникнет ошибка при исполнении (обращение к необъявленной переменной, например) - то второй метод не спасет.
А первый - спасёт, для того и предназначен
Страницы: 1
Читают тему
Наверх