我正在尝试创建自己的自定义错误,但是我不希望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);
}
}
如果您可以使用不稳定的功能,也可以Termination
和Try
特性,这将允许您在main()
中使用原始代码,但可以自定义其行为。 (对于这个简单的案例,对我来说这似乎太过分了。)ExitCode
,它使您可以指示ExitCode::SUCCESS
或ExitCode::FAILURE
。您也可以使用std::process::exit()
设置退出代码,但是我不知道在稳定的Rust中访问与平台相关的成功和失败代码的方法。 关于error-handling - 如何从主结果处理程序中删除默认的 “Error”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63048619/