错误处理 pcall, xpcall
类似其他语言下的try, catch:
pcall(func, arg1, ...) 相当于捕获了不做任何处理
1 try { 2 //do something 3 } catch (Exception ex) { 4 // do nothing 5 }
xpcall(func, exceptionHandler) 相当于捕获了你可以打印堆栈或做其他处理
注意:xpcall不支持参数传入,所以一般会用闭包调用
1 try { 2 // do something 3 } catch (Exception ex) { 4 ex.printStackTrance(); 5 }
1 function Div(a, b)
2 assert(b ~= 0)
3 return a / b
4 end
5
6 function errorHandler(msg)
7 print("+++++ msg: ", msg)
8 print(debug.traceback("+++++ begin", 3))
9 print("+++++ end")
10 end
11
12 local ok, result = pcall(Div, 2, 2)
13 print(ok, result)
14 print(pcall(Div, 2, 0))
15
16 local ok, result = xpcall(function() Div(2, 0) end, errorHandler)
17 print(ok, result)
debug.traceback(msg, skipCount): 打印堆栈信息