lua以xpcall实现try/catch功能
-- 打印错误信息
local function __TRACKBACK__(errmsg)
local track_text = debug.traceback(tostring(errmsg), );
print("---------------------------------------- TRACKBACK ----------------------------------------");
print(track_text, "LUA ERROR");
print("---------------------------------------- TRACKBACK ----------------------------------------");
local exception_text = "LUA EXCEPTION\n" .. track_text;
return false;
end --[[ 尝试调一个function 这个function可以带可变参数
如果被调用的函数有异常 返回false,退出此方法继续执行其他代码并打印出异常信息;]]
function trycall(func, ...)
local args = { ... };
return xpcall(function() func(unpack(args)) end, __TRACKBACK__);
end
--测试代码: trycall(function(param)
print("message "..param)
print("message "..nil)
end, "test trycall")
##输出结果如下:
>lua -e "io.stdout:setvbuf 'no'" "itertor_test.lua"
message test trycall
---------------------------------------- TRACKBACK ----------------------------------------
itertor_test.lua:45: attempt to concatenate a nil value
stack traceback:
itertor_test.lua:43: in main chunk
[C]: ? LUA ERROR
---------------------------------------- TRACKBACK ----------------------------------------
>Exit code: 0
xpcall (f, err)
This function is similar to pcall
,except that you can set a new error handler.
xpcall
calls function f
in protected mode,using err
as the error handler.Any error inside f
is not propagated;instead, xpcall
catches the error,calls the err
function with the original error object,and returns a status code.Its first result is the status code (a boolean),which is true if the call succeeds without errors.In this case, xpcall
also returns all results from the call,after this first result.In case of any error,xpcall
returns false plus the result from err
.
最新文章
- xenserver
- POJ3691DNA repair
- springmvc学习(三)
- 【InstallShield】 为什么卸载后有的文件没有删掉
- LabVIEW系列——错误簇的传递
- keil多文件组织方法
- C语言的本质(29)——C语言与汇编之寄存器和寻址方式
- Win7下安装composer, 并使用其安装smarty
- PTA中提交Python3程序的一些套路
- jenkins默认会存放目录
- redis中的数据类型
- Codeforces 247D Mike and Fish
- Flink – WindowedStream
- map文件的使用
- EGit系列第二篇——关联远程仓库
- Django-Form表单(验证、定制、错误信息、Select)
- POJ2186:Popular Cows(tarjan+缩点)
- 第一个openGL程序
- bzoj 4372 烁烁的游戏——动态点分治+树状数组
- jquery 等html加载完成再绑定事件
热门文章
- 14.Xcode8imageview图片圆角不显示的bug
- ARC模式下的内存泄露问题
- doxygen的使用(二)给代码添加javadoc风格的注释
- 【转载】【树形DP】【数学期望】Codeforces Round #362 (Div. 2) D.Puzzles
- Asp.Net 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- 中国UTM分区
- JS-JQuery(JSONP)调用WebService跨域若干技术点
- HTML5中的 Canvas
- java基础4_字符串
- 关于css3媒体查询和响应式布局