• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Lua]trycatch实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考了https://blog.csdn.net/waruqi/article/details/53649634这里的代码,但实际使用时还有些问题,修改后在此记录一下。

 1 -- 异常捕获
 2 function try(block)
 3     -- get the try function
 4     local try = block[1]
 5     assert(try)
 6 
 7     -- get catch and finally functions
 8     local funcs = block[2]
 9 
10     -- try to call it
11     local ok, errors = xpcall(try, debug.traceback)
12     if not ok then
13         -- run the catch function
14         if funcs and funcs.catch then
15             funcs.catch(errors)
16         end
17     end
18 
19     -- run the finally function
20     if funcs and funcs.finally then
21         funcs.finally(ok, errors)
22     end
23 
24     -- ok?
25     if ok then
26         return errors
27     end
28 end
29 
30 function test()
31 try
32     {
33         function ()
34             xxx()
35         end,
36         {
37             -- 发生异常后,被执行
38             catch = function (errors)
39                 print("LUA Exception : " .. errors)
40             end,
41 
42             finally = function (ok, errors)
43                 -- do sth.
44                 print("finally can work")
45             end
46         },
47     }
48 print("I can print normally!")
49 end
50 
51 test()
异常捕获代码+测试代码

调用test()后,运行结果如下:

 

又改了一版,格式输入看起来更容易理解,代码如下:

 1 -- 异常捕获
 2 function try1(block)
 3     local main = block.main
 4     local catch = block.catch
 5     local finally = block.finally
 6 
 7     assert(main)
 8 
 9     -- try to call it
10     local ok, errors = xpcall(main, debug.traceback)
11     if not ok then
12         -- run the catch function
13         if catch then
14             catch(errors)
15         end
16     end
17 
18     -- run the finally function
19     if finally then
20         finally(ok, errors)
21     end
22 
23     -- ok?
24     if ok then
25         return errors
26     end
27 end
28 
29 function test1()
30 try1{
31         main = function ()
32             xxx()
33         end,
34         catch = function (errors)
35             print("catch : " .. errors)
36         end,
37         finally = function (ok, errors)
38             print("finally : " .. tostring(ok))
39         end,
40     }
41 print("I can print normally!")
42 end
43 
44 test1()
新版try-catch

打印结果如下:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua协同程序发布时间:2022-07-22
下一篇:
LuaIO库详解发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap