Rust错误处理详细图解

  • 错误处理是一种机制, 在这种机制中, Rust确定错误的可能性并确认你在代码进行编译之前已采取了某些措施。
  • 这种机制使程序更加健壮, 因为它使你能够在部署代码以进行生产之前发现并处理错误。
  • Rust编程语言不包含异常。
Rust中有两种错误类型:
  • 无法恢复的错误:
  • 可恢复的错误
Rust错误处理详细图解

文章图片
  • 可恢复的错误:可恢复的错误是报告给用户的错误, 用户可以重试该操作。可恢复的错误并不是很严重, 无法完全停止该过程。它由Result < T, E> 表示。可恢复错误的示例是” 找不到文件” 。
    其中, T&E是通用参数。
    T-> 这是一种值的类型, 在成功情况下会返回” OK” 变量。
    E-> 这是一种错误类型, 在失败情况下使用” Err” 变体返回。
  • 不可恢复的错误:当Rust报告一个不可恢复的错误时, 那就慌了!宏停止程序的执行。例如:” 被零除” 是不可恢复错误的一个示例。
可恢复错误与不可恢复错误 可恢复错误是可以以某种方式恢复的错误, 而不可恢复错误是无法以任何方式恢复的错误。
让我们看一下预期行为的场景:
"100".parse();

【Rust错误处理详细图解】在上述情况下, ” 100″ 是字符串, 因此我们无法确定上述情况是否有效。这是预期的行为。因此, 这是一个可恢复的错误。
  • 意外行为
Rust错误处理详细图解

文章图片
断言!:断言!当我们要声明某件事为真时使用。如果它不正确和足够错误, 则程序将停止执行。它引起了恐慌! , 如果在运行时表达式未评估为true。
让我们看一个简单的例子:
fn main(){let x : bool = false; assert!(x==true); }

输出
Rust错误处理详细图解

文章图片
在上面的示例中, x的值为false, 并且assert中的条件为!宏为假。因此, 一个断言!引发恐慌!在运行时。
不可达!:不可达!宏用于无法访问的代码。该宏非常有用, 因为编译器无法确定无法访问的代码。无法访问的代码由无法访问决定!在运行时。
让我们看一个简单的例子:
enum Value{Val, }fn get_number(_:Value)-> i32{ 5}fn find_number(val:Value)-> & 'static str{match get_number(val){7 => "seven", 8=> "eight", _=> unreachable!()}}fn main(){println!("{}", find_number(Value::Val)); }

输出
Rust错误处理详细图解

文章图片
在上面的示例中, get_number()函数返回的值为5, 它与每个模式都匹配, 但与任何模式都不匹配。因此, 遥不可及!宏引起了恐慌!宏

    推荐阅读