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

 -- 异常捕获
function try(block)
-- get the try function
local try = block[]
assert(try) -- get catch and finally functions
local funcs = block[] -- try to call it
local ok, errors = xpcall(try, debug.traceback)
if not ok then
-- run the catch function
if funcs and funcs.catch then
funcs.catch(errors)
end
end -- run the finally function
if funcs and funcs.finally then
funcs.finally(ok, errors)
end -- ok?
if ok then
return errors
end
end function test()
try
{
function ()
xxx()
end,
{
-- 发生异常后,被执行
catch = function (errors)
print("LUA Exception : " .. errors)
end, finally = function (ok, errors)
-- do sth.
print("finally can work")
end
},
}
print("I can print normally!")
end test()

异常捕获代码+测试代码

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

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

 -- 异常捕获
function try1(block)
local main = block.main
local catch = block.catch
local finally = block.finally assert(main) -- try to call it
local ok, errors = xpcall(main, debug.traceback)
if not ok then
-- run the catch function
if catch then
catch(errors)
end
end -- run the finally function
if finally then
finally(ok, errors)
end -- ok?
if ok then
return errors
end
end function test1()
try1{
main = function ()
xxx()
end,
catch = function (errors)
print("catch : " .. errors)
end,
finally = function (ok, errors)
print("finally : " .. tostring(ok))
end,
}
print("I can print normally!")
end test1()

新版try-catch

打印结果如下:

[Lua] try catch实现的更多相关文章

  1. luajava学习一

    luajava环境的搭建就不写了,网上百度,google下就ok啦. 我是在android平台下运行的项目,好了先看代码 TextView tv=(TextView)findViewById(R.id ...

  2. lua以xpcall实现try/catch功能

    -- 打印错误信息 local function __TRACKBACK__(errmsg) ); print("-------------------------------------- ...

  3. 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  4. 【转】封装Lua for C#

    原文:http://blog.csdn.net/rcfalcon/article/details/5583095 为了搞懂LUA在我们的GDEX中到底怎么用,我决定研究一下如何比较好的在WPF里封装一 ...

  5. Lua 与 Redis

    Lua 与 Redis 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis - 案例-实现访问频率限制: 实现访问者 $ip 在一定的 ...

  6. Lua: 好的, 坏的, 和坑爹的

                                   好的       小巧: 20000行C代码 可以编译进182K的可执行文件 (Linux下).       可移植: 只要是有ANSI ...

  7. 第二十四篇:导出SOUI对象到LUA脚本

    LUA是一种体积小,速度快的脚本语言.脚本语言虽然性能上和C++这样的Naitive语言相比差一点,但是开发速度快,可以方便的更新代码等,近年来受到了越来越多开发者的重视. 在SOUI框架中,我把脚本 ...

  8. Lua JSONRPC学习笔记

    JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...

  9. java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错

    我遇到这个错误是因为在引用脚本目录时,设置错了位置.设置成脚本所在目录的上级目录. lua使用和加载初始化方法 在java中使用lua,使用需要引用 luaj-jse-2.0.2.jar 同时需要使用 ...

随机推荐

  1. 预估高并发下API服务器数量

    我的主要工作就是API的编写,应该关注API的响应时间,以及并发时候的响应.那么如何测试API响应时间,以及预计高并发服务器压力呢? 从访问日志开始查起. 1 首先统计API每日访问总数.举例假设某个 ...

  2. 【错误记录】记录蛋疼的 mysql 错误

    -- 应用信息表 DROP TABLE IF EXISTS `table_name`; CREATE TABLE `ks_apps_info` ( `id` ) NOT NULL COMMENT 'i ...

  3. 1103. [POI2007]MEG-Megalopolis【树链剖分】

    Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1.. ...

  4. 检查oracle用户默认密码的账户

    1. 检查使用默认用户密码的账号 --11g 通过数据字典SYS.DEFAULT_PWD$或视图DBA_USERS_WITH_DEFPWD select u.username, u.account_s ...

  5. jar的解压与打包

    当我们在公司上班时候,时长需要将本地开发的作业打包上传到集群运行,由于项目过多依赖会导致jar比较庞大,因此每一次上传都比较浪费时间,为了节省时间可以使用两种办法: 1:将所有依赖一次性上传到集群上, ...

  6. programming-languages学习笔记--第9部分

    programming-languages学习笔记–第9部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src ...

  7. React 入门学习笔记2

    摘自阮一峰:React入门实例教程,转载请注明出处. 一.获取真实的DOM节点 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM).只有当它 ...

  8. 【转】纯JS省市区三级联动(行政区划代码更新至2015-9-30)

    本文代码实现的功能是省市区三级联动下拉列表,纯Javascript,网上已有很多这方面的代码.但是作为一个新手,这是我的第一篇CSDN博客,发此文的目的主要是学习交流,希望看到的朋友发现有什么不对的地 ...

  9. C++编写简单的Service和Client

    在上一步的基础上 编写Service节点 这里,我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和. ...

  10. Test随笔

    测试一级主题 测试二级主题 测试内容,修改会不会出现历史记录