当已知某些代码段可能引发错误时,我们使用try/catch
块来忽略此类错误并继续进行。当错误不是那么重要时可以执行此操作,但是也许我们只想记录该错误即可:
try{
int i = 1/0;
} catch( ArithmeticException e){
System.out.println("Encountered an error but would proceed.");
}
x = y;
Java中的这种构造将继续执行x = y;
。
我可以利用match
来执行此操作或其他任何构造吗?
我确实看到了一个try!
宏,但是如果方法的返回类型为Result
出错,它可能会返回。
我想在UT中使用这样的构造,以确保即使在发生错误之后它也可以继续运行。
答案 0 :(得分:19)
Rust中可能失败的函数返回Result
:
Result<T, E>
是用于返回和传播错误的类型。它是一个枚举,其变体Ok(T)
表示成功并包含一个值,而Err(E)
则表示错误并包含一个错误值。
我强烈建议您阅读Error Handling section中的Rust Book:
Rust具有许多功能,可以处理出现问题的情况
如果您想忽略错误,则有不同的可能性:
请勿使用Result
:
let _ = failing_function();
该函数将被调用,但结果将被忽略。
使用if let
或match
忽略Err
的{{1}}变体:
Result
解开错误。如果发生错误,此代码会出现紧急情况:
if let Ok(ret) = failing_function() {
// use the returned value
}
let ret = failing_function().unwrap();
// or
let ret = failing_function().expect("A panic message to be displayed");
解开结果,如果发生错误,则提早返回该函数。但是,使用try!()
代替?
更为习惯。
另请参阅: