Rust 学习笔记 13:错误处理 (Error Handling)

Rust 学习笔记 13:错误处理 (Error Handling) “To err is human; to handle it safely is Rusty.” Go 开发者最熟悉的代码可能是 if err != nil。 Rust 也有类似的机制,但它利用强大的枚举类型 Result<T, E> 把错误处理提升到了一个新的高度。 Rust 将错误分为两类: 不可恢复错误:bug 导致的,比如数组越界。使用 panic!。 可恢复错误:文件未找到、网络超时等。使用 Result<T, E>。 1. Panic! (不可恢复错误) 当程序遇到无法处理的状况时(例如访问数组越界),Rust 会 panic。程序会打印错误信息,展开 (unwind) 栈,清理数据,然后退出。 1panic!("crash and burn"); 你也可以配置 Cargo.toml 让 panic 时直接 abort(不清理栈),以减小二进制体积。 2. Result (可恢复错误) 大部分时候我们不希望程序崩溃。 1enum Result<T, E> { 2 Ok(T), 3 Err(E), 4} 处理 Result 的标准姿势是 match: 1let f = File::open("hello.txt"); 2 3let f = match f { 4 Ok(file) => file, 5 Err(error) => panic!("Problem opening the file: {:?}", error), 6}; unwrap 和 expect: 如果你确定不会出错,或者为了省事(在 demo 代码中),可以使用 unwrap()。如果出错它会直接 panic。expect("msg") 则是带自定义消息的 unwrap。 ...

2025-03-11 · 2 min · 237 words · 老墨