首页 技术杂谈 正文
  • 本文约453字,阅读需2分钟
  • 368
  • 0

Rust - panic!错误处理

摘要

Rust中,panic!是代码遇险时的紧急逃生口,而Result则是你的稳健导航仪。用Cargo.toml一招panic = 'abort',让你的程序身轻如燕。掌握Rust,让错误处理变得游刃有余!

Panic! 错误处理

Rust错误处理

  • Rust的可靠性:错误处理
    • 大部分情况下:在编译时提示错误,并处理
  • 错误的分类
    • 可恢复
      • 例如文件未找到,可再次尝试
  • 不可恢复
    • Bug,例如访问的索引超出范围
  • Rust没有类似的异常机制
    • 可恢复错误:Result<T, E>
    • 不可恢复错误:panic!

1.2 不可恢复的错误和panic! 宏

  • panic! 宏执行时
    • 程序会打印一个错误消息
    • 展开、清理调用栈
    • 退出程序
  • 为应对 panic,展开或中止调用栈
    • 默认情况下,当 panic 发生
      • 程序展开调用栈(工作量大)
      • Rust 沿着调用栈往回走
      • 清理每一个遇到的函数中的数据
      • 或立即中止调用栈
      • 不进行清理,直接停止程序
      • 内存需要 OS 进行清理
  • 要想二进制文件更小,把设置从“展开”改为“中止”
    • Cargo.toml 中适当的 profile 部分设置
    • panic = 'abort'

1.3 Result 枚举

  • 使调用者处理可能发生的错误,而不是忽视它们。在 Rust 中处理可能失败的函数时,通常会返回一个 Result 类型:

enum Result<T, E> {
    // 操作成功的情况
    Ok(T),
    // 操作失败的情况
    Err(E),
}
评论