成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

理解 Rust 中的不可恢復錯誤和可恢復錯誤

開發 前端
在 Rust 中,不可恢復錯誤指的是程序無法安全繼續執行的情況。這些錯誤通過 panic!? 宏來處理。當 panic! 被觸發時,應用程序將停止執行,并展開棧,這通常會導致進程終止。

在 Rust 中,錯誤分為兩類:可恢復錯誤和不可恢復錯誤。對于可恢復錯誤,我們使用 Result 枚舉,而對于不可恢復錯誤,我們使用 panic! 宏。

Rust 中的不可恢復錯誤:Panic 宏

在 Rust 中,不可恢復錯誤指的是程序無法安全繼續執行的情況。這些錯誤通過 panic! 宏來處理。當 panic! 被觸發時,應用程序將停止執行,并展開棧,這通常會導致進程終止。

示例:索引越界

例如,如果你嘗試訪問超出向量范圍的索引,將會引發 panic:

let names = vec!["Sunny", "Hugo", "Charlie"];
names[10]; // 這將導致 panic

// thread 'main' panicked at src/main.rs:5:10:
// index out of bounds: the len is 3 but the index is 10

在數據無效或無法從錯誤中恢復的情況下,你可以手動調用 panic! 宏:

panic!("The app cannot continue, please fix data");

// thread 'main' panicked at src/main.rs:2:5:
// The app cannot continue, please fix data

不可恢復錯誤總結

當程序因關鍵問題(如數據無效或違反程序假設的情況)而無法繼續時,就會發生不可恢復錯誤。panic! 宏用于在這些錯誤發生時停止程序執行。

Rust 中的可恢復錯誤:Result 枚舉

與此相對,可恢復錯誤是指程序可以處理并繼續運行的錯誤。這類錯誤通過 Result 枚舉來處理。

Result 枚舉有兩個變體:

  • Ok(T): 表示成功,包含結果值
  • Err(E): 表示失敗,包含錯誤值
enum Result<T, E> {
  Ok(T),
  Err(E)
}

示例:文件未找到

如果你嘗試打開一個不存在的文件,可以在不崩潰程序的情況下處理錯誤。以下是使用 Result 枚舉和 match 語句的示例:

use std::fs::File;

fn main() {
    let file = File::open("bad_file.png");
    match file {
        Ok(f) => {
            println!("File found {:?}", f);
        },
        Err(e) => {
            println!("File not found {:?}", e);
        }
    }

    println!("App is still running...");
}

// File not found Os { code: 2, kind: NotFound, message: "The system cannot find the file specified." }
// App is still running...

如你所見,程序沒有 panic,而是通過打印錯誤信息來處理錯誤,應用程序繼續運行。

錯誤處理的輔助方法

你可能見過 Rust 中的 unwrap() 方法,并想知道它的作用。unwrap() 是處理 Result 類型的快捷方式,但存在風險。如果結果是 Ok,unwrap() 返回值。然而,如果結果是 Err,unwrap() 將導致 panic。

你可以用 unwrap() 替換 match 語句:

let file = File::open("bad_file.png").unwrap();

// thread 'main' panicked at src/main.rs:4:43:
// called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "The system cannot find the file specified." }

如你所見,如果文件未找到,程序將 panic 并停止運行。

第二個選項是 expect()。

expect() 方法類似于 unwrap(),但允許你提供自定義錯誤信息。如果你希望提供更多關于錯誤的上下文,而不僅僅依賴于默認的 panic 信息,這將非常有用。

let file = File::open("bad_file.png").expect("Ooops something went wrong");

// thread 'main' panicked at src/main.rs:4:43:
// Ooops something went wrong: Os { code: 2, kind: NotFound, message: "The system cannot find the file specified." }

結論

  • 不可恢復錯誤:在程序無法繼續的情況下使用 panic!。這些錯誤會停止程序的執行。
  • 可恢復錯誤:使用 Result 枚舉來處理程序可以繼續的錯誤。你可以使用 match、unwrap() 或 expect() 來處理這些錯誤。
責任編輯:武曉燕 來源: Rust開發筆記
相關推薦

2017-04-10 14:56:22

windows重啟

2023-10-27 14:54:04

CipherWindows

2021-04-12 11:25:31

手機數據設備

2015-09-22 09:26:21

DBA失誤備份數據丟失

2022-03-25 08:00:00

Kubernetes備份集群

2023-01-07 14:48:09

3D信息

2009-11-18 09:39:06

Oracle介質恢復

2017-03-29 19:00:20

災難恢復IT停機虛擬化

2018-06-15 09:26:13

RTORPO差異

2018-08-21 12:14:07

華為云

2013-08-08 10:10:06

備份策略全備份增量備份

2023-09-07 07:53:21

JavaScriptGoRust

2009-04-13 09:26:00

IP地址網絡管理故障

2023-04-17 07:41:02

Rust網絡數據

2023-08-07 06:39:03

網絡傳輸

2023-10-28 16:30:19

Golang開發

2010-05-31 10:35:58

機柜數據中心

2011-03-24 17:49:47

數據庫恢復

2011-07-12 17:55:28

尾日志備份

2017-06-07 19:18:56

Oracle實例恢復前滾和回滾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区三区免费在线 | 国产精品国产成人国产三级 | 99亚洲国产精品 | 最新超碰 | 成人影院免费视频 | 成人午夜视频在线观看 | 天堂久久一区 | www国产精 | 精品国产一区二区三区久久久蜜月 | 黄色欧美视频 | 亚洲精品国产第一综合99久久 | 在线看片网站 | 婷婷在线免费 | 久久久久久免费毛片精品 | 亚洲高清在线 | 欧美性猛交一区二区三区精品 | 国产特一级黄色片 | 国产日韩精品视频 | 激情久久久久 | 国产激情精品一区二区三区 | 成人在线小视频 | 播放一级黄色片 | 日韩精品一区二区三区在线观看 | 久久精品99| 国产精品欧美大片 | 中文字幕久久精品 | 欧美激情久久久 | 91av免费看 | 精品综合网 | 给我免费的视频在线观看 | 久久久久久a | 成人在线精品视频 | 九九色综合 | 国产高清一区二区 | 亚洲一区二区三区久久久 | 亚洲成av | 成人精品一区 | 国产日韩欧美另类 | 欧美一区二区三区在线观看视频 | 久草成人网 | 人人干人人干人人干 |