你如何抛出Lua错误?

时间:2016-03-01 23:44:19

标签: error-handling lua throw

是否可以从调用该函数的脚本处理的函数中抛出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 

意图是在我的实际用例中我的功能会更复杂,我想提供更有意义的错误消息

3 个答案:

答案 0 :(得分:4)

使用error function

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.3http://wiki.roblox.com/index.php?title=Function_dump/Basic_functions#xpcall