Lua如何返回错误而不终止程序?代码执行异常求助
问题描述
我编写了一段简单的Lua代码如下:
local function my_fun(x) return nil, error("oops", 2) end local res, err = my_fun("foo") print(res) print(err) print("finish")
我期望程序能执行到打印"finish",但实际程序直接退出了。报错信息如下:
lua: test.lua:5: oops stack traceback: [C]: in function 'error' test.lua:2: in local 'my_fun' test.lua:5: in main chunk [C]: in ?
请问如何修改才能仅返回错误而不终止程序?
解决方案
问题核心是error()函数的作用是抛出错误并终止程序,而非返回错误信息。要实现仅返回错误不终止程序,有两种常见方式:
方式一:直接返回错误字符串
不需要调用error(),直接把错误内容作为第二个返回值返回即可:
local function my_fun(x) return nil, "oops" end local res, err = my_fun("foo") print(res) print(err) print("finish")
执行这段代码会依次输出nil、oops、finish,程序不会提前终止。
方式二:用pcall()捕获错误(保留栈追踪)
如果需要保留错误的调用栈信息,同时让程序继续执行,可以使用pcall()(保护调用)包裹函数执行,它会捕获错误并返回状态和错误信息:
local function my_fun(x) error("oops", 2) end local ok, result = pcall(my_fun, "foo") if not ok then -- 执行失败,result是错误信息(含栈追踪) print(nil) print(result) else -- 执行成功,result是函数返回值 print(result) print(nil) end print("finish")
这段代码会输出错误信息和栈追踪,最后正常打印finish,程序不会提前退出。
内容的提问来源于stack exchange,提问作者MengCheng Wei
相关产品推荐
相关产品推荐

