Hello!
2012/7/5 damacheng009 <damac...@gmail.com>:
> 片段2:
> local status, err = xpcall(function () a = "a" + 1 end, function ()
> print(debug.traceback()) end)
> print(status)
> print(err) -- 打印nil
>
> 片段1打印出了出错原因
> 片段2打印了出错时的traceback,可片段2想得到片段1的出错原因,却获取不到,请问大家怎么得到出错原因呢,
因为 xpcall 在第一个返回值之后,返回的是其第二个函数参数运行后的返回值,这与 pcall 是不同的。你的例子在 xpcall
的第二个参数函数中并未返回任何有意义的值,所以 xpcall 的第二个返回值自然是 nil. 你的例子改成下面这样,就符合你的需求了:
local status, err = xpcall(function () a = "a" + 1 end,
function (err) print(debug.traceback()) return err end)
print(status)
print(err)
更多细节可以参见 Lua 5.1 的官方文档中对 xpcall 函数的用法介绍:
http://www.lua.org/manual/5.1/manual.html#pdf-xpcall
Best regards,
-agentzh