Using unwrap() in Rust is Okay (2022)
a year ago
- #Error Handling
- #Rust
- #Programming
- 文章讨论了Rust编程中`unwrap()`的合理使用场景,强调在供他人使用的库或应用程序中不应将其用于错误处理,因为这会导致糟糕的用户体验。
- 恐慌(panic)机制被认为非常适合调试,因其能提供堆栈追踪和行号信息便于诊断问题,但不适合作为面向终端用户的错误提示方式。
- 作者认为当程序员能确保恐慌不会发生时(例如测试代码、示例程序或维护不变量的场景),使用`unwrap()`和`expect()`是可接受的。
- 运行时不变量的讨论指出这些本应恒真的条件需在运行时检查,并通过示例展示了如何通过恐慌或编译时检查来处理它们。
- 文章建议优先使用`expect()`替代`unwrap()`以获得更清晰的错误信息,但也承认当`expect()`会造成冗余时可使用`unwrap()`。
- 对'可恢复'与'不可恢复'错误的二分法提出质疑,主张更具体的处理策略——恐慌应仅用于标识程序中的逻辑错误。
- 作者反对全面禁用`unwrap()`的代码检查规则,指出这是符合语言习惯的用法,且在Rust代码中禁止所有可能引发恐慌的操作并不现实。
- 通过`aho-corasick`和`regex-syntax`等实际库的案例,展示了运行时不变量与API设计如何影响选择恐慌或优雅错误处理的决策过程。