- 错误处理是一种机制, 在这种机制中, Rust确定错误的可能性并确认你在代码进行编译之前已采取了某些措施。
- 这种机制使程序更加健壮, 因为它使你能够在部署代码以进行生产之前发现并处理错误。
- Rust编程语言不包含异常。
Rust中有两种错误类型:
- 无法恢复的错误:
- 可恢复的错误
- 可恢复的错误:可恢复的错误是报告给用户的错误, 用户可以重试该操作。可恢复的错误并不是很严重, 无法完全停止该过程。它由Result <T, E>表示。可恢复错误的示例是”找不到文件”。
其中, T&E是通用参数。
T->这是一种值的类型, 在成功情况下会返回” OK”变量。
E->这是一种错误类型, 在失败情况下使用” Err”变体返回。 - 不可恢复的错误:当Rust报告一个不可恢复的错误时, 那就慌了!宏停止程序的执行。例如:”被零除”是不可恢复错误的一个示例。
可恢复错误与不可恢复错误
可恢复错误是可以以某种方式恢复的错误, 而不可恢复错误是无法以任何方式恢复的错误。
让我们看一下预期行为的场景:
"100".parse();
在上述情况下, ” 100″是字符串, 因此我们无法确定上述情况是否有效。这是预期的行为。因此, 这是一个可恢复的错误。
- 意外行为
断言!:断言!当我们要声明某件事为真时使用。如果它不正确和足够错误, 则程序将停止执行。它引起了恐慌! , 如果在运行时表达式未评估为true。
让我们看一个简单的例子:
fn main()
{
let x : bool = false;
assert!(x==true);
}
输出
在上面的示例中, x的值为false, 并且assert中的条件为!宏为假。因此, 一个断言!引发恐慌!在运行时。
不可达!:不可达!宏用于无法访问的代码。该宏非常有用, 因为编译器无法确定无法访问的代码。无法访问的代码由无法访问决定!在运行时。
让我们看一个简单的例子:
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, 它与每个模式都匹配, 但与任何模式都不匹配。因此, 遥不可及!宏引起了恐慌!宏