[Lua] try catch实现
参考了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实现的更多相关文章
- luajava学习一
luajava环境的搭建就不写了,网上百度,google下就ok啦. 我是在android平台下运行的项目,好了先看代码 TextView tv=(TextView)findViewById(R.id ...
- lua以xpcall实现try/catch功能
-- 打印错误信息 local function __TRACKBACK__(errmsg) ); print("-------------------------------------- ...
- 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 【转】封装Lua for C#
原文:http://blog.csdn.net/rcfalcon/article/details/5583095 为了搞懂LUA在我们的GDEX中到底怎么用,我决定研究一下如何比较好的在WPF里封装一 ...
- Lua 与 Redis
Lua 与 Redis 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis - 案例-实现访问频率限制: 实现访问者 $ip 在一定的 ...
- Lua: 好的, 坏的, 和坑爹的
好的 小巧: 20000行C代码 可以编译进182K的可执行文件 (Linux下). 可移植: 只要是有ANSI ...
- 第二十四篇:导出SOUI对象到LUA脚本
LUA是一种体积小,速度快的脚本语言.脚本语言虽然性能上和C++这样的Naitive语言相比差一点,但是开发速度快,可以方便的更新代码等,近年来受到了越来越多开发者的重视. 在SOUI框架中,我把脚本 ...
- Lua JSONRPC学习笔记
JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...
- java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错
我遇到这个错误是因为在引用脚本目录时,设置错了位置.设置成脚本所在目录的上级目录. lua使用和加载初始化方法 在java中使用lua,使用需要引用 luaj-jse-2.0.2.jar 同时需要使用 ...
随机推荐
- Linux新建用户没有设置密码
只要你能登陆root账户就行 登陆root账户 输入 echo "密码“ | passwd --stdin 用户名
- 预估高并发下API服务器数量
我的主要工作就是API的编写,应该关注API的响应时间,以及并发时候的响应.那么如何测试API响应时间,以及预计高并发服务器压力呢? 从访问日志开始查起. 1 首先统计API每日访问总数.举例假设某个 ...
- 【linux】安装和配置 mysql服务器
按照官网教程,根据自己的系统安装不同的发行版 https://dev.mysql.com/doc/refman/5.6/en/linux-installation-yum-repo.html 配置: ...
- 解决Struts2 json-plugin Date或Timestamp等日期格式带T的问题
如果没有对日期时间对象类进行json日期格式声明,会出现类似"2013-06-18T12:08:56.23"日期,在日期中间多出一个T字母: 从通过查询数据,以及调试程序发现直到返 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- prometheus-入门尝试
prometheus-入门 Prometheus 是由 SoundCloud 开源监控告警解决方案2015 年在 github 上开源以来,已经吸引了 很多大公司的使用:2016 年 Promethe ...
- [消息传输123]ActiveMQ
http://www.uml.org.cn/zjjs/201802111.asp https://www.cnblogs.com/cyfonly/p/6380860.html
- 20155314 2016-2017-2 《Java程序设计》第2周学习总结
20155314 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 学习目标 了解Java编程风格 认识Java的类型与变量 掌握Java流程控制的方法(分支. ...
- 将Tensor输出到文件
) local file = io.open('/home/xbwang/Desktop/part2original','a') ,length do number = part2[j] file:w ...
- Redis——总结
启动 redis 客户端,打开终端并输入命令 redis-cli.该命令会连接本地的 redis 服务. $redis-cli redis 127.0.0.1:6379> redis 127.0 ...