第 7 章 错误处理
吉姆•布兰迪
我知道只要活得足够久,这种事就一定会发生。
——萧伯纳论死亡
Rust 的错误处理方法很不寻常,值得用单独的一章来讨论。这里没有什么深奥的编程思想,只是对你来说可能有点儿新而已。本章介绍了 Rust 中的两类错误处理:panic 和 Result。
普通错误使用 Result 类型来处理。Result 通常用以表示由程序外部的事物引发的错误,比如错误的输入、网络中断或权限问题。这些问题并不是意料之中的,在没有任何 bug 的程序中也可能会不时出现。虽然本章大部分内容是关于 Result 的,但我们会先介绍 panic,因为它相对来说比较简单。
panic 针对的是另一种错误,即那种永远不应该发生的错误。
7.1 panic
当程序遇到下列问题的时候,就可以断定程序自身存在 bug,故而会引发 panic:
数组越界访问;
整数除以 0;
在恰好为 Err 的 Result 上调用 .expect();
断言失败。
(panic!() 是一种宏,用于处理程序中出现错误的情况。当你的代码检测到出现错误并需要立即触发 panic 时,就可以使用这个宏。panic!() 可以接受类似于 println!() 的可选参数表,用于构建错误消息。)
以上情况的共同点是它们都由(不客气地说)程序员的错误所导致。而行之有效的一条经验法则是:“不要 panic”。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Rust 异常处理方法包括 panic 和 Result 两种类型。panic 用于处理永远不应该发生的错误,如数组越界访问、整数除以 0 等;而 Result 用于处理由程序外部的事物引发的错误,如错误的输入、网络中断或权限问题。文章介绍了 panic 的处理方式,包括展开调用栈和中止进程,以及如何使用 catch_unwind() 函数捕获调用栈展开,使线程继续运行。此外,文章还介绍了 Result 类型,指出了其在函数执行失败时返回成功结果或错误结果的特点,以及如何使用 match 表达式来处理 Result 类型。总的来说,本文通过介绍 Rust 中的错误处理方法,帮助读者了解如何处理不同类型的错误,使程序更加健壮。文章还介绍了 Result 类型的多个有用方法,如 is_ok()、ok()、err()、unwrap_or() 等,以及 Result 类型的别名和打印错误的方法。这些内容丰富了读者对 Rust 错误处理的理解,为他们在实际编程中处理错误提供了有力的工具。文章还指出 Rust 要求程序员在每个可能发生错误的地方做出某种决策,并将其记录在代码中,以及 Rust 会检查 Result 值是否被用过了,这样你就不会意外地让错误悄悄溜过去。文章最后指出,Rust 在错误处理方面比其他语言要严格一些,但对系统编程来说,这绝对是值得的。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论