日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

里rust怎么找蓝图_Rust错误处理

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 里rust怎么找蓝图_Rust错误处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

錯誤處理是程序開發中必不可少的一個環節,在Rust中,錯誤分成兩個類別:可恢復錯誤和不可恢復錯誤。 可恢復錯誤:比如說未找到文件,Rust中用Result<T,E>來實現 不可恢復錯誤:比如數組訪問越界,Rust中用panic!實現

1.panic!

這個有感嘆號,很顯然是一個宏,我們來使用一下子。

fn main() {panic!("panic here!"); }

報錯信息:

thread 'main' panicked at 'panic here!', srcmain.rs:2:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized ... 這底下還有很多調用堆棧的信息哈,我們現在不去關心它

使用RUST_BACKTRACE=1命令來運行程序也可以調出調用堆棧信息。

2.Result

Result其實是一個枚舉類型,它的原型如下:

enum Result<T, E> {Ok(T),Err(E), }

我們通過打開文件來舉例說明:

use std::fs::File;fn main() {let f = File::open("Rust.txt");//枚舉當然需要來match一下let f = match f {Ok(file) => file,Err(error) => panic!("error: {}", error),}; }

我們的當前目錄里并沒有這個文件,預期是會出錯的。

報錯信息:

thread 'main' panicked at 'error: 系統找不到指定的文件。 (os error 2)', srcmain.rs:8:23 stack backtrace:0: backtrace::backtrace::trace_unsynchronized

emmm,我這里居然還是中文!。。。我以為是No such a file or directory.

3.簡寫形式

我們可以通過unwrap或者expect函數來簡寫程序。

use std::fs::File;fn main() { // let f = File::open("Rust.txt"); // //枚舉當然需要來match一下 // let f = match f { // Ok(file) => file, // Err(error) => panic!("error: {}", error), // };let f = File::open("Rust.txt").unwrap(); }

報錯信息:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "系統找不到指定的文件。" }', srclibcoreresult.rs:1165:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized use std::fs::File;fn main() {let f = File::open("Rust.txt").expect("failed to open Rust.txt"); }

報錯信息:

thread 'main' panicked at 'failed to open Rust.txt: Os { code: 2, kind: NotFound, message: "系統找不到指定的文件。" }', srclibcoreresult.rs:1165:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized

4.傳播錯誤

當我們調用一個函數的時候,函數內部可能出錯,而調用方需要捕捉錯誤信息,因此可以將錯誤傳出來,這個過程就是傳播錯誤。

還是以讀取文件內容來舉例:

use std::fs::File; use std::io::Read; use std::io;fn main() {let res = read_file();match res {Ok(str) => println!("str: {}", str),Err(error) => println!("error: {}", error)}; }fn read_file() -> Result<String, io::Error> {let f = File::open("Rust.txt");let mut f = match f {Ok(file) => file,Err(error) => return Err(error)};let mut str = String::new();match f.read_to_string(&mut str) {Ok(_) => Ok(str),Err(error) => Err(error)} }

我們創建了一個Rust.txt文件,運行結果如下:

str: Rust編程之路

我們把文件刪除:

運行結果:

error: 系統找不到指定的文件。 (os error 2)

也是把錯誤信息打印出來了。

5.小問號,你是否有很多朋友?

我們可以通過“?”,來做到傳播錯誤的簡寫:

use std::fs::File; use std::io::Read; use std::io;fn main() {let res = read_file();match res {Ok(str) => println!("str: {}", str),Err(error) => println!("error: {}", error)}; }fn read_file() -> Result<String, io::Error> {let mut f = File::open("Rust.txt")?;let mut str = String::new();f.read_to_string(&mut str)?;Ok(str) }

還可以再簡單一點:

fn read_file() -> Result<String, io::Error> {let mut str = String::new();File::open("Rust.txt")?.read_to_string(&mut str)?;Ok(str) }

就很棒!

6.panic!和Result如何選擇?

在測試過程中,我們可以使用panic!,這樣調試起來比較方便。

但是在正式發布的代碼中,為了程序的健壯性和容錯率,最好不要使用panic!

個人觀點哈~

7.panic的實現機制

在Rust中,panic的實現方式有兩種:unwind和abort

unwind 方式在發生panic 的時候,會一層一層地退出函數調用枝,在此過程中,當前棧內的局部變量還可以正常析構。 abort 方式在發生panic 的時候,會直接退出整個程序。

一般來說,默認情況下,編譯器都是使用的unwind模式。

如何用戶自己制定:

rustc -C panic=unwind test.rs rustc -C panic=abort test.rs

歡迎關注公眾號:Rust編程之路

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的里rust怎么找蓝图_Rust错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日操夜夜操视频 | 在线免费福利 | 无遮挡在线观看 | h欧美 | 丁香花电影在线观看免费高清 | 在线观看日韩精品 | 日批免费在线观看 | 实拍澡堂美女洗澡av | 亚洲熟女综合色一区二区三区 | sese亚洲 | 一本久久a精品一合区久久久 | 国产精品毛片久久 | 国产乱人对白 | 嫩草懂你 | 好吊日av| 亚洲老女人视频 | 天天干天天干天天干 | 99精品国产99久久久久久97 | 亚洲精品视频中文字幕 | 亚洲一区在线观 | 日韩欧美亚洲天堂 | 四虎网站| 香蕉视频在线视频 | 夜色88v精品国产亚洲 | 亚洲国产精品久久久久久6q | 91国语对白 | 99久久九九| 伊人一道本| 国产成人亚洲欧洲在线 | 成人乱人乱一区二区三区 | 天堂中文字幕在线观看 | 91影院在线播放 | 俄罗斯毛片| 牛人盗摄一区二区三区视频 | 中文字幕一区二区三区四区视频 | 51精品国产 | 欧美日韩黄色片 | 青青青草视频 | hd丰满圆润的女人hd | a一级免费视频 | 国产精品视频一区在线观看 | 亚洲av熟女国产一区二区性色 | 亚洲福利在线观看 | av不卡免费在线 | 国内露脸中年夫妇交换 | 国产一国产二国产三 | 中国黄色大片 | 91精品国产一区二区 | 色老头一区二区 | 一区二区国产视频 | 成年人的毛片 | 国产精品一区二区免费视频 | 国产精品久久久久久久久久久久久久久久久久 | 午夜激情亚洲 | 成年人看的黄色 | 天天躁狠狠躁 | 91麻豆精品国产91久久久久久 | 777久久久 | 国产一区二区毛片 | 亚洲av综合av一区二区三区 | 日本高清不卡视频 | 日本特黄视频 | 亚洲精品v天堂中文字幕 | 菲律宾黄色片 | 99色图 | 国产又黄又猛又粗 | 色呦呦国产 | 国产黄色免费网站 | 欧美精品一级二级三级 | 性欧美www | 91国内精品野花午夜精品 | 国产福利久久 | 阿拉伯性视频xxxx | 综合另类 | 四虎久久 | 免费在线观看a级片 | 在线观看精品视频 | 国产一区二区三区小说 | 日韩高清影视 | 福利在线视频观看 | 青青草综合 | 国产日本欧美在线观看 | 一级黄色淫片 | 中文字幕第一页在线视频 | 大乳村妇的性需求 | 日韩黄色片网站 | 亚洲精品一区二区在线 | 99精品视频播放 | 男女午夜爽爽 | 久久性av | 国产亚洲精品美女久久久 | 麻豆国产尤物av尤物在线观看 | 美女福利视频在线 | 亚洲精品在线播放视频 | 亚洲视频一二三区 | 草草视频网站 | 亚洲人人夜夜澡人人爽 | 中文字幕在线观看第二页 | 亚洲熟妇av日韩熟妇在线 |