You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:31:21