Rust錯誤處理

2021-10-01 08:57:29 字數 1775 閱讀 2861

要不是使用「?」,rust的錯誤處理會顯得有些不夠靈巧。要使用「?」我們需要宣告返回值型別為result型別,這種型別可以包含任何具備std::error::error特徵從而可以轉換為bax型別的錯誤型別。

拿我們需要處理io錯誤和字串轉換為數字錯誤舉例:

use std::fs::file;

use std::io::prelude::*;

use std::error::error;

fn run(file: &str) -> result>

這裡使用了倆個"?"處理可能發生的io錯誤:開啟檔案錯誤和讀取內容為string錯誤。

使用了乙個「?」處理可能發生的型別轉換錯誤。

最後我們將結果包裝為ok型別。rust可以中返回值中判斷出parse的結果為i32型別。

簡化result型別的宣告比較容易,我們可以定義乙個自己的result型別,比如:

type boxresult= result>
但是,我們程式還需要自定義error型別,那我們就需要做些其他工作:

就像這樣:

use std::error::error;

use std::fmt;

#[derive(debug)]

struct myerror

impl myerror

}}impl fnt::display for myerror ", self.details)

}}impls error for myerror

}//乙個測試我們自定義錯誤的函式

fn raises_my_error(yes: bool) -> result<(), myerror> else

}

輸入result比較麻煩,所以很多模組都定義了自己的result型別,這樣可以少敲幾下鍵盤。比如io模組定義了io::reust代替result使用。

在下面的例子中演示的是怎麼處理string型別轉化為浮點數型別可能出現錯誤的情況。

現在我們知道使用"?"可以方便的把有錯誤的表示式轉換為err返回。這種轉換是通過from特徵實現的。

你可以繼續使用這種方便的轉換,這在一些比較簡單的應用中是個不錯的選擇,接下來我們演示的場景會複雜一些。

parsefloaterror實現了error特徵,所以它具備description()方法。

use std::num::parsefloaterror;

impl fromfor myerror

}fn parse_f64(s: &str, yes: bool) -> result

fn main() ", parse_f64("42", false));

println!(" ", parse_f64("42", true));

println!(" ", parse_64("?42", false));

}

執行結果會是這樣:

ok(42)

err(myerror )

err(myerror )

rust學習筆記 錯誤處理

rust的錯誤分兩種 rust提供了可恢復錯誤的型別result t,e 與不可恢復錯誤時終止執行的panic!巨集。程式會在panic!巨集執行時列印出一段錯誤提示資訊,展開並清理當前的呼叫棧,然後退出程式,這種情況大部分都發生在某個錯誤被檢測到,但程式設計師卻不知道該如何處理的時候。panic的...

回顧 了解 Rust 中的錯誤處理

精彩回顧 錯誤處理是 並解決故障可能性的過程。例如,程式無法讀取檔案,繼續使用該錯誤的輸入,將導致更多的錯誤。你發現和控制故障的能力可以使程式避免其他更多的陷阱。在本課程中,你將學習使用 panic option 和 result 處理 rust 中錯誤的方法。有了這些知識,你就可以自信地識別和解決...

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...