Error handling “如何删除默认值”;“错误”;从主结果处理程序

Error handling “如何删除默认值”;“错误”;从主结果处理程序,error-handling,rust,main,boilerplate,Error Handling,Rust,Main,Boilerplate,我正在尝试创建自己的自定义错误,但我不希望Rust自动在错误消息前面添加Error:。我该怎么做 代码: 使用std::error::error; 使用std::fmt; #[导出(调试)] 枚举自定义错误{ 试验 } impl fmt::显示自定义错误{ fn fmt(&self,f:&mut fmt::Formatter)->fmt::Result{ 匹配自我{ CustomError::Test=>write!(f,“Test”) } } } fn main()->结果{ Err(Cust

我正在尝试创建自己的自定义错误,但我不希望Rust自动在错误消息前面添加
Error:
。我该怎么做

代码:

使用std::error::error;
使用std::fmt;
#[导出(调试)]
枚举自定义错误{
试验
}
impl fmt::显示自定义错误{
fn fmt(&self,f:&mut fmt::Formatter)->fmt::Result{
匹配自我{
CustomError::Test=>write!(f,“Test”)
}
}
}
fn main()->结果{
Err(CustomError::Test)?;
好(())
}
预期输出(标准):

测试

实际输出(标准偏差):

错误:测试


错误:
前缀是由添加的。避免该错误的最简单方法是使
main()
返回
()
,然后自己在
main()
中处理错误。例如:

fn foo() -> Result<(), CustomError> {
    Err(CustomError::Test)?;
    Ok(())
}

fn main() {
    if let Err(e) = foo() {
        eprintln!("{:?}", e);
    }
}
fn foo()->结果{
Err(CustomError::Test)?;
好(())
}
fn main(){
如果让Err(e)=foo(){
eprintln!(“{:?}”,e);
}
}
如果您可以使用不稳定的功能,还可以

  • 在自定义结果类型上实现
    终止
    尝试
    特征,这将允许您在
    main()
    中使用原始代码,但自定义其行为。(对于这个简单的案例,我觉得这太过分了。)
  • 从main返回一个
    ExitCode
    ,它允许您指示
    ExitCode::SUCCESS
    ExitCode::FAILURE
    。您还可以使用
    std::process::exit()
    设置退出代码,但我不知道有什么方法可以访问stable Rust中依赖于平台的成功和失败代码

  • 在这种情况下,进程将退出一个错误代码,你可以考虑在main中处理错误而不是传播。我不知道你的意思是什么,你能解释一下吗?我确实在测试这个过程,通过在结果中强制输入一个错误代码!谢谢你的澄清!谢谢你的提醒!我还研究了这一点:(这也显示了类似的答案)。把这个放在这里,以备其他人需要!;)