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

 

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