错误处理 pcall, xpcall

pcall

pcall(func, arg1, ...) 相当于捕获了不做任何处理

类似其他语言下的try, catch:

try {
    //do something
} catch (Exception ex) {
    // do nothing
}

 

local function Div(a, b)
    return a / b
end
   
local ok, result = pcall(Div, 2, 1)
print(ok, result)
print(pcall(Div, 2, 0))

 

xpcall

xpcall(func, exceptionHandler) 相当于捕获了你可以打印堆栈或做其他处理

注意:xpcall不支持参数传入,所以一般会用闭包调用

try {
    // do something
} catch (Exception ex) {
   ex.printStackTrance();
}

 

local function Div(a, b)
    return a / b
end

local function errorHandler(msg)
    print("+++++ msg: ", msg)
    print(debug.traceback("+++++ begin", 3))
    print("+++++ end")
end

local ok, result = xpcall(function() 
    return Div(2, 1) 
end, errorHandler)
print(ok, result)

 

debug.traceback(msg, skipCount): 打印堆栈信息

 

posted @ 2021-03-03 15:40  yanghui01  阅读(292)  评论(0)    收藏  举报