我正在尝试创建自己的自定义错误,但我不希望 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
如何避免这种情况?
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()
中使用原始代码,但自定义其行为。 (对于这个简单的情况,这对我来说似乎有点过分了。)ExitCode
,它允许您指示 ExitCode::SUCCESS
或 ExitCode::FAILURE
。您还可以使用 std::process::exit()
设置退出代码,但我不知道如何在稳定的 Rust 中访问依赖于平台的成功和失败代码。