Rust錯誤處理

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

Rust中有兩種類型的錯誤:

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

Rust錯誤處理

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

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

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

"100".parse();

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

意外的行爲

Rust錯誤處理

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

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

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

執行上面示例代碼,得到以下結果:
Rust錯誤處理

在上面的例子中,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));  
}

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

Rust錯誤處理

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