我有关于在恐慌后采取行动的问题!.我有很强的经验与python,我经常使用:
try:
do_something()
exception:
do_something_else()
但不能这样做 rust .我的代码如下:
fn do_something(value: u32) -> Result<u32, io::Error> {
if value > 30 {
panic!("Value is bigger then 30!");
}
else {
Ok(value)
}
}
// first try
fn if_else_catch(value: u32) -> Result<u32, u32> {
let result = do_something(value);
let something = match result {
Ok(something) => something + something,
Err(err) => do_something_else(),
};
Ok(something)
}
fn if_else_catch_retun_different_value(value: u32) -> Result<u32, u32> {
let result = do_something(value);
let something = match result {
Ok(something) => something + something,
Err(err) => 100,
};
Ok(something)
}
// another try
fn do_something_else_with_questionmark(value: u32) -> Result<u32, io::Error> {
let result = do_something(value)?;
if let Err(_err) = do_something(value) {
println!("An Error occured!");
}
Ok(result)
}
fn main() {
println!("Do something: {}", do_something(35).unwrap());
println!("Do something res: {}", if_else_catch(35).unwrap());
}
有可能做到吗?我该如何实施?
我已经检查了文档,但这样的例子:
一个二个一个一个
对这个案子没用。
1条答案
按热度按时间brccelvz1#
在您的错误用例中,很自然的事情就是返回一个
Err
:如果确实需要,可以使用
catch_unwind
从死机中恢复,但是不建议将此函数用于一般的try/catch机制。
Result
类型更适合用于可能定期失败的函数。此外,此函数不保证捕获所有异常。