您的位置:首页 > 编程语言 > Lua

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: