Result::expect对给定的消息感到恐慌。不过,我想在惊慌失措之前先记录一下。假设我使用了日志外观和实现,我想做一些事情:
// a result called `result`
result.something_like_expect(|e| {
// assuming `e` is an error instance and implements `Display`
error!("An error happened: {}", e);
// and panics here
});
Run Code Online (Sandbox Code Playgroud)
使用 Rust 1.39.0 有这样的解决方案吗?
您可以尝试map_err使用unwrap:
fn main() {
let result: Result<(), String> = Err("error message".into());
result.map_err(|e| log::error!("Failed with: {}", e)).unwrap();
}
Run Code Online (Sandbox Code Playgroud)
但我建议你保留错误并将它们全部用anyhowcrate 向上发送:
use anyhow::Error;
fn main() -> Result<(), Error> {
let result: Result<(), Error> = Err(Error::msg("error message"));
let unwrapped_result = result?;
Ok(())
}
Run Code Online (Sandbox Code Playgroud)