pcall () игнорирует ошибку os.execute () - PullRequest
0 голосов
/ 21 мая 2018

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

В этом файле "KAImage.lua" у меня есть синтаксическая ошибка (= vs ==) и когда вызывается пример функции ниже

print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua"))

, это вызывает ошибку при трассировке и сразу после нее true true, поэтому означает, что pcall() абсолютно игнорирует исключение.

Выполнение сценария нене останавливается, и я не могу понять, в чем проблема.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

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

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)

Я не думаю, что выполнение файла Lua с использованием os.execute - хорошая идея.Он будет работать с правильным shebang, но будет порождать отдельный процесс (ы).

IMO, что вам нужно это dofile(lua_file_name):

Открывает указанный файл и выполняет его содержимое какЛуа Чанк.... Возвращает все значения, возвращаемые чанком.В случае ошибок, dofile передает ошибку вызывающей стороне (то есть, dofile не запускается в защищенном режиме).

Задача pcall - перехватывать ошибки, если вам нужно их перехватить.ошибка, вы можете использовать код, как показано ниже:

local chunk, err = loadfile(lua_file_name)
if not chunk then
    -- invalid Lua code, check err
    return
end
local ok, err = xpcall (chunk, debug.traceback))
if not ok then
    -- error was catched, err contains detailed stack info and error description
    return
end
-- success
0 голосов
/ 22 мая 2018

os.execute не вызывает никаких ошибок, когда не удается выполнить команду;он возвращает nil в качестве первого значения, сигнализирующего об ошибке, вместе с некоторыми дополнительными значениями, как , описанное в руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...