当知道某些代码可能会抛出错误时,我们会使用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中使用这样的构造,以确保即使在发生错误之后它仍继续运行。
Rust中的函数可以失败返回Result
:
Result<T, E>
是用于返回和传播错误的类型。它是变量的枚举,Ok(T)
,表示成功并包含值,Err(E)
表示错误并包含错误值。
我强烈建议你阅读Error Handling section中的Rust Book:
Rust有许多功能可以处理出现问题的情况
如果您想忽略错误,则有不同的可能性:
Result
:
let _ = failing_function();
将调用该函数,但结果将被忽略。Err
或Result
忽略if let
的match
变体:
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!()
会打开一个结果并提前返回该函数。但是,你应该使用?
而不是try!
,因为这是probably going to be deprecated。
也可以看看: