如何避免从main返回Result时出现“Error:”输出?

问题描述 投票:0回答:1

我正在尝试创建自己的自定义错误,但我不希望 Rust 自动在错误消息前面添加

Error: 

use std::error::Error;
use std::fmt;

#[derive(Debug)]
enum CustomError {
    Test
}

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

预期输出(stderr):

Test

实际输出(stderr):

Error: Test

如何避免这种情况?

rust error-handling rust-result
1个回答
4
投票

Error:
前缀是由 Termination
Result
实现添加的。避免这种情况的最简单选择是让
main()
返回
()
,然后在
main()
中自行处理错误。示例:

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

fn main() {
    if let Err(e) = foo() {
        eprintln!("{:?}", e);
    }
}

如果您可以使用不稳定的功能,也可以

  • 在自定义结果类型上实现
    Termination
    Try
    特征,这将允许您在
    main()
    中使用原始代码,但自定义其行为。 (对于这个简单的情况,这对我来说似乎有点过分了。)
  • 从 main 返回一个
    ExitCode
    ,它允许您指示
    ExitCode::SUCCESS
    ExitCode::FAILURE
    。您还可以使用
    std::process::exit()
    设置退出代码,但我不知道如何在稳定的 Rust 中访问依赖于平台的成功和失败代码。
© www.soinside.com 2019 - 2024. All rights reserved.