gpt4 book ai didi

error-handling - 如何从主结果处理程序中删除默认的 “Error”

转载 作者:行者123 更新时间:2023-12-03 08:18:22 25 4
gpt4 key购买 nike

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

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

#[derive(Debug)]
enum CustomError {
Test
}
impl fmt::Display for CustomError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
CustomError::Test => write!(f, "Test")
}
}
}

fn main() -> Result<(), CustomError> {
Err(CustomError::Test)?;
Ok(())
}
预期的输出(stderr):

Test


实际输出(stderr):

Error: Test

最佳答案

Error:前缀由 Termination implementation for Result 添加。避免它的最简单选择是让main()代替返回(),然后自己在main()中处理错误。例子:

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

fn main() {
if let Err(e) = foo() {
eprintln!("{:?}", e);
}
}
如果您可以使用不稳定的功能,也可以
  • 在自定义结果类型上实现TerminationTry特性,这将允许您在main()中使用原始代码,但可以自定义其行为。 (对于这个简单的案例,对我来说这似乎太过分了。)
  • 从main返回一个ExitCode,它使您可以指示ExitCode::SUCCESSExitCode::FAILURE。您也可以使用std::process::exit()设置退出代码,但是我不知道在稳定的Rust中访问与平台相关的成功和失败代码的方法。
  • 关于error-handling - 如何从主结果处理程序中删除默认的 “Error”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63048619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com