Lua从入门到放弃--异常处理
2016-05-05 09:11
519 查看
一个老大爷上车没人给他让座,他就一直站在我旁边叨叨什么世风日下啊,过了两站路我实在忍受不了了,站起来给他让座,他居然不坐,我让他别客气,他说:我TMD不会开车和你客气个什么...
如果需要在lua中处理错误,必须使用函数pcall来包装需要执行的代码。
pcall接收一个函数和要传递的参数,并执行,执行结果:有错误和无错误;返回值为true或者false,errorinfo。例:
local fun = function( ... )
local a = 1;
print( a + 1 );
return a + 1;
end
tryCatch = function( fun )
local ret, errMessage = pcall( fun )
print( "ret:" .. ( ret and "true" or "false" ) .. " \nerrMessage:" .. ( errMessage or "null" ));
end
trCatch( fun );
上面这个例子,如果fun函数执行正常,则返回true, 执行有误,则返回false和错误信息。pcall以一种保护模式来调用第一个参数,因此pcall可以捕获函数执行中的任何错误。
通常在错误发生时,希望得到更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用的栈的部分内容。lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,lua会在调用栈展看前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。
接着上面的例子写:
xTryCatchErrorInfo = function ()
print(debug.traceback());
end
xTryCatch = function( fun )
local ret, errMessage = xpcall( fun, xTryCatchGetErrorInfo);
print( "ret:" .. (ret and "true" or "false") .. " \nerrMessage:" .. (errMessage or "null"));
end
xTryCatch( fun );
上面的例子中有用到debug.traceback函数,这个函数是根据调用栈来构建一个扩展的错误消息。对于debug库还有一个比较常用的函数,debug.debug,这个函数提供一个lua提示符,让用户来价差错误的原因。
例如使用debug.traceback()函数得到的打印信息如下:
stack traceback:
/Users/xiaowu/Desktop/testPacll.lua:17: in function 'xTryCatch'
/Users/xiaowu/Desktop/testPacll.lua:26: in main chunk
[C]: ?
本文参考lua手册 http://www.lua.org/manual/5.3/manual.html
如果需要在lua中处理错误,必须使用函数pcall来包装需要执行的代码。
pcall接收一个函数和要传递的参数,并执行,执行结果:有错误和无错误;返回值为true或者false,errorinfo。例:
local fun = function( ... )
local a = 1;
print( a + 1 );
return a + 1;
end
tryCatch = function( fun )
local ret, errMessage = pcall( fun )
print( "ret:" .. ( ret and "true" or "false" ) .. " \nerrMessage:" .. ( errMessage or "null" ));
end
trCatch( fun );
上面这个例子,如果fun函数执行正常,则返回true, 执行有误,则返回false和错误信息。pcall以一种保护模式来调用第一个参数,因此pcall可以捕获函数执行中的任何错误。
通常在错误发生时,希望得到更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用的栈的部分内容。lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,lua会在调用栈展看前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。
接着上面的例子写:
xTryCatchErrorInfo = function ()
print(debug.traceback());
end
xTryCatch = function( fun )
local ret, errMessage = xpcall( fun, xTryCatchGetErrorInfo);
print( "ret:" .. (ret and "true" or "false") .. " \nerrMessage:" .. (errMessage or "null"));
end
xTryCatch( fun );
上面的例子中有用到debug.traceback函数,这个函数是根据调用栈来构建一个扩展的错误消息。对于debug库还有一个比较常用的函数,debug.debug,这个函数提供一个lua提示符,让用户来价差错误的原因。
例如使用debug.traceback()函数得到的打印信息如下:
stack traceback:
/Users/xiaowu/Desktop/testPacll.lua:17: in function 'xTryCatch'
/Users/xiaowu/Desktop/testPacll.lua:26: in main chunk
[C]: ?
本文参考lua手册 http://www.lua.org/manual/5.3/manual.html
相关文章推荐
- lua语言-string.gsub
- LeetCode|Evaluate Reverse Polish Notation
- LeetCode-150.Evaluate Reverse Polish Notation
- Lua编程基础
- Lua io和字符串函数基础
- lua 可变参数
- lua-oc-java相互调用
- lua中table.sort的回调函数
- leetcode-150. Evaluate Reverse Polish Notation
- openwrt UCI API lua wiki
- Lua从入门到放弃--程序接口
- Compile TrinityCore /Merge Eluna Lua Engine & Update Source/Engine
- 2dx-lua精灵添加触摸事件
- freeswitch lua实现ivr导航
- lua匹配UTF-8中文汉字
- lua中常用的函数
- php和lua的变量作用域
- 服务器搭建:3.2、openresty图片压缩之 lua调用GraphicsMagick
- Lua安装及使用总结
- quick-lua文件加密步骤