错误处理 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): 打印堆栈信息

浙公网安备 33010602011771号