Logging 如何使用Result::expect在恐慌之前记录消息?
对给定的消息感到恐慌。然而,我想在恐慌之前登录。假设我已经使用了facade和一个实现,我想做如下工作:Logging 如何使用Result::expect在恐慌之前记录消息?,logging,rust,Logging,Rust,对给定的消息感到恐慌。然而,我想在恐慌之前登录。假设我已经使用了facade和一个实现,我想做如下工作: //一个名为'result'的结果` 结果。像你期望的那样(| e |{ //假设'e'是一个错误实例并实现'Display'` 错误!(“发生错误:{}”,e); //还有这里的恐慌 }); 使用Rust 1.39.0有这样的解决方案吗?您可以尝试将map\u err与展开一起使用: fn main() { let result: Result<(), String>
//一个名为'result'的结果`
结果。像你期望的那样(| e |{
//假设'e'是一个错误实例并实现'Display'`
错误!(“发生错误:{}”,e);
//还有这里的恐慌
});
使用Rust 1.39.0有这样的解决方案吗?您可以尝试将
map\u err
与展开一起使用:
fn main() {
let result: Result<(), String> = Err("error message".into());
result.map_err(|e| log::error!("Failed with: {}", e)).unwrap();
}
? 请注意,错误时的恐慌不是健壮的代码感谢“健壮的代码”注释。我是个新手(虽然我不是一个完全的编程新手)。我正在努力理解它。是的,我猜恐慌不是一个好主意。我还看到我可以从main
返回Result
,但它不符合代码库中的许多类型的错误。所以我认为使用panic
总比不使用要好。尽管仍在等待其他答案,但可能有人提供了不同的观点。但这并不符合我的代码库中的许多类型的错误——请注意,失败并不是唯一的错误。我们鼓励您查看可用的库并选择一个适合您的库。谢谢您的回答。我将调查有关错误处理的板条箱。我知道Shepmaster是snafu
的作者。是的,你也可以用那个板条箱。它可以派生自定义错误。如果您使用无论如何
,您将需要此错误
板条箱来派生自定义错误类型。
use anyhow::Error;
fn main() -> Result<(), Error> {
let result: Result<(), Error> = Err(Error::msg("error message"));
let unwrapped_result = result?;
Ok(())
}