Rust錯誤處理

錯誤處理是Rust確定出錯的可能性並確認在代碼進行編譯之前採取某些操作的機制。
此機制使程式更加健壯,因為能夠在部署生產代碼之前發現並處理錯誤。
Rust編程語言不包含異常。

Rust中有兩種類型的錯誤:

  • 不可恢復的錯誤。
  • 可恢復的錯誤。

  • 可恢復的錯誤: 可恢復的錯誤是報告給用戶的錯誤,用戶可以重試該操作。 完全停止該過 程的可恢復錯誤並不嚴重。 它由Result <T,E>表示。 可恢復錯誤的示例是“找不到檔”。T&E是通用參數。
    T->這是一種值,在成功的情況下返回一個’OK’變數。
    E->這是一種錯誤類型,在具有Err變體的故障情況下返回。
  • 不可恢復的錯誤: 當Rust報告一個不可恢復的錯誤時,那就是!宏停止執行程式。例如:“除以零”是不可恢復錯誤的示例。

可恢復錯誤與不可恢復錯誤

可恢復錯誤是可以某種方式恢復的錯誤,而不可恢復錯誤是無法以任何方式恢復的錯誤。
下麵來看一下預期行為的情景:

"100".parse();

在上述情況下,"100"是一個字串,因此不確定上述情況是否有效,這是預期的行為。 因此,它是一個可恢復的錯誤。

意外的行為

assert! :當想要聲明它是真時使用。 如果它不正確和錯誤,則程式停止執行。

下麵來看一個簡單的例子:

fn main()
{
    let x : bool = false;
    assert!(x==true);
}

執行上面示例代碼,得到以下結果:

在上面的例子中,x的值為falseassert!斷言中的條件為假。 因此,在運行時assert!調用panic!

unreachable! :它用於無法訪問的代碼。 此宏很有用,因為編譯器無法確定無法訪問的代碼。 在運行時由 unreachable! 執行。

下麵來看一個簡單的例子:

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));
}

執行上面示例代碼,得到以下結果 -

在上面的示例中,get_number()函數返回的值為5,它與每個模式匹配,但不與任何模式匹配。 因此,unreachable!宏調用panic!宏 。


上一篇: Rust字串 下一篇: Rust不可恢復的錯誤