Zig Academy · 课时

使用 catch 恢复

发生错误时提供后备方案。

第 1 / 4 课13 个步骤

使用 catch 恢复 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。

错误需要应对方案

函数可以返回类似 !u32 的错误联合类型。在使用结果之前,您必须决定失败时要做什么。

认识 catch

catch 运算符通过提供一个在调用返回错误时使用的备用值,将错误联合类型转换为普通值。

const n = parse(text) catch 0;

备用值会替代错误

如果调用成功,您会得到实际值。如果调用出错,您会得到 catch 右侧的值,因此 n 始终是可用的数字。

const n = parse(text) catch -1;

catch 是一个表达式

由于 catch 会产生一个值,您可以在任何需要值的地方内联使用它,例如直接作为函数参数。

print(parse(text) catch 0);

捕获错误

添加管道捕获来检查出了什么问题。竖线之间的名称保存着返回的具体错误值。

const n = parse(text) catch |err| {
    log(err);
    return 0;
};

catch 可以执行代码块

catch 的右侧可以是完整的代码块。您可以用它记录日志、计算备用值,或在继续执行前跳出循环。

const v = open(path) catch |e| blk: {
    break :blk fallback;
};

catch 可以提前返回

当无法恢复时,您可以从 catch 内部使用 return 离开函数。发生错误时,后面的代码永远不会执行。

const f = open(path) catch return error.MissingFile;

catch unreachable

写出 catch unreachable 表示断言该调用不可能失败。在安全构建中,如果这里真的发生错误,程序会触发恐慌,而不是忽略错误。

const n = parse("42") catch unreachable;

谨慎使用 unreachable

只有在错误确实不可能发生时,才使用 catch unreachable。如果您不确定,请改为提供真正的备用处理。

catch 与 try 的区别

如果您可以立即在这里处理错误,请使用 catch。如果您希望把错误传递给调用方,请使用 try。

显式处理恢复

每个错误联合类型都会迫使您做出选择,因此失败绝不会被悄悄丢弃。使用 catch,您可以准确决定如何恢复。

快速检查

您希望调用失败时使用安全的默认值并继续执行。哪种表达式合适?

回顾

您使用 catch 通过备用值、代码块、提前返回或断言来从错误中恢复。失败始终会被有意处理。✅

免费开始

用 AI 导师学习 Zig — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「使用 catch 恢复」课时是免费的吗?

是的 — 「使用 catch 恢复」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。

「使用 catch 恢复」这节课中我会学到什么?

发生错误时提供后备方案。 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Zig Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 catch 恢复」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Zig Academy 课中编写并运行代码吗?

能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 catch 恢复
  2. 针对特定错误进行 switch
  3. 使用 errdefer 清理失败状态
  4. 包装并重新抛出错误
← 返回 Zig Academy