课时 15 · 错误处理与调试
课时 15 · 错误处理与调试(Lua 进阶):能定位并妥善处理运行时错误。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。
本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 Lua 在线运行器 并直接跑出结果 (课程示例统一按 5.1 跑;运行器里也能切到 5.3)。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 能定位并妥善处理运行时错误。
知识讲解
pcall 保护调用:返回成功标志与返回值或错误信息;xpcall 可挂错误处理函数;error 主动抛错;assert 断言条件。引擎脚本中常用 pcall 包裹可能失败的逻辑(如物品发放),失败时打印日志而不让整个脚本崩溃。调试手段:print 输出关键变量、分阶段注释排查、检查错误信息中的文件与行号。
示例:pcall 保护
function risky(x)
if type(x) ~= 'number' then error('参数必须为数字') end
return 100 / x
end
local ok, result = pcall(risky, 0)
if ok then
print('成功', result)
else
print('失败原因:', result)
end
练习任务
- 给模块加错误保护并输出日志:模块内每个公开函数用 pcall 包裹,失败时把错误信息写入 log.txt。
参考:日志与保护
local M = {}
local function log(err)
local f = io.open('log.txt', 'a')
f:write(os.date('%H:%M:%S'), ' ', tostring(err), '\n')
f:close()
end
function M.safe(fn, ...)
local ok, res = pcall(fn, ...)
if not ok then log(res) end
return ok, res
end
return M
本篇依据
- 《996 新三端 Lua 开发教学技术手册》课时 15
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。