[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 同时需要使用 ...
随机推荐
- Array.prototype.reduce 的理解与实现
Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...
- Java8新特性 -- 四大内置的核心函数式接口
可以把这些函数式接口作为方法的参数. 1.0 核心内置函数式接口一: 消费型接口@FunctionalInterfacepublic interface Consumer<T> { voi ...
- mysqldump.md
mysqldump命令 选项 -A, --all-databases:导出全部数据库 -Y, --all-tablespaces:导出全部表空间. -y, --no-tablespaces:不导出任何 ...
- python and、or以及and-or
@Python: and.or以及and-or 一.and: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. & ...
- 第三周:Excel分析
Excel常用于敏捷,快速,需要短时间相应的场景下是非常便捷的数据处理工具. 相对于语言类例如python和R等则用于常规的,规律的场景中应用,便于形成日常规则统计分析. 对于学习的路径:Excel函 ...
- HtmlImageGenerator字体乱码问题解决、html2image放linux上乱码问题解决
使用html2image-0.9.jar生成图片. 在本地window系统正常,放到服务器linux系统时候中文乱码问题.英文可以,中文乱码应该就是字体问题了. 一.首先需要在linux安装字体,si ...
- 1068. [SCOI2007]压缩【区间DP】
Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小 写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上 ...
- echarts显示X轴最后一个lable
代码: xAxis: [ { axisLabel: { showMaxLabel: true } } ]
- canvas绘制折线图(仿echarts)
遇到的问题:Retina屏上字体线条模糊问题 解决方案:放大canvas的大小,然后用css压缩回原大小,例如:想要900*400的画布,先将画布设置为 width="1800px" ...
- MongoDB DBA 实践1-----Windows
一.先决条件 1.支持的平台 在3.4版中更改: MongoDB不再支持32位x86平台. MongoDB需要x86-64架构并支持以下内容: Windows 7 / Server 2008 R2 W ...