是否可以从调用该函数的脚本处理的函数中抛出Lua错误?
例如,以下内容将在指定的评论
处抛出错误local function aSimpleFunction(...)
string.format(...) -- Error is indicated to be here
end
aSimpleFunction("An example function: %i",nil)
但我宁愿做的是捕获错误并通过函数调用者抛出自定义错误
local function aSimpleFunction(...)
if pcall(function(...)
string.format(...)
end) == false then
-- I want to throw a custom error to whatever is making the call to this function
end
end
aSimpleFunction("An example function: %i",nil) -- Want the error to start unwinding here
意图是在我的实际用例中我的功能会更复杂,我想提供更有意义的错误消息
答案 0 :(得分:4)
error("something went wrong!")
答案 1 :(得分:3)
抛出新错误时可以指定错误的堆栈级别
i
通常,错误会在消息开头添加有关错误位置的一些信息。 level参数指定如何获取错误位置。对于级别1(默认值),错误位置是调用错误函数的位置。级别2将错误指向调用调用错误的函数的位置;等等。传递0级可以避免在消息中添加错误位置信息。
使用问题中给出的示例
++i
答案 2 :(得分:-1)
捕获错误就像使用pcall
My_Error()
--Error Somehow
end
local success,err = pcall(My_Error)
if not success then
error(err)
end
毫无疑问,你问的是这是如何运作的。好pcall
在受保护的线程(受保护的调用)中运行一个函数,并返回一个bool(如果它成功运行)和一个值(它返回的内容/错误)。
另外,不要认为这意味着函数的参数是不可能的,只需将它们传递给pcall
:
My_Error(x)
print(x)
--Error Somehow
end
local success,err = pcall(My_Error, "hi")
if not success then
error(err)
end
要获得更多错误处理控制权,请参阅http://www.lua.org/manual/5.3/manual.html#2.3和http://wiki.roblox.com/index.php?title=Function_dump/Basic_functions#xpcall