Rust错误处理详细图解

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

Rust中有两种错误类型:

  • 无法恢复的错误:
  • 可恢复的错误
Rust错误处理
  • 可恢复的错误:可恢复的错误是报告给用户的错误, 用户可以重试该操作。可恢复的错误并不是很严重, 无法完全停止该过程。它由Result <T, E>表示。可恢复错误的示例是”找不到文件”。
    其中, T&E是通用参数。
    T->这是一种值的类型, 在成功情况下会返回” OK”变量。
    E->这是一种错误类型, 在失败情况下使用” Err”变体返回。
  • 不可恢复的错误:当Rust报告一个不可恢复的错误时, 那就慌了!宏停止程序的执行。例如:”被零除”是不可恢复错误的一个示例。

可恢复错误与不可恢复错误

可恢复错误是可以以某种方式恢复的错误, 而不可恢复错误是无法以任何方式恢复的错误。

让我们看一下预期行为的场景:

"100".parse();

在上述情况下, ” 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, 它与每个模式都匹配, 但与任何模式都不匹配。因此, 遥不可及!宏引起了恐慌!宏


微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?