问题描述
[[1,2,3],[-4,-5,-6],[7,8],[-9],[10],[-11],[12]]
我得到这个结果:
use std::error::Error;
fn main() -> Result<(),Box<dyn Error>> {
Err("May
June")?
}
Error: "May\nJune"
我尝试过:
Error: May
June
但这只会使情况变得更糟:
Err("May
June").map_err(|e|
format!("{:?}",e)
)?
解决方法
您必须自己打印错误,而不要依赖默认的后备实现。
main() -> Result<…>
显示错误的Debug
版本(其中转义了字符串)。它旨在作为示例或游戏围栏的快速解决方案,而不是用于任何人都在乎输出表示的真实程序。
使用:
fn main() {
if let Err(e) = run() {
eprintln!("{}",e);
std::process::exit(1);
}
}
fn run() -> Result<(),Box<dyn Error>> {
// etc
}
它将使用Display
格式打印错误。
main()
的内置错误处理没有什么特别的,因此您自己打印错误不会丢失任何东西。
还有另一种解决方案,可对错误实施自定义Debug
实现,以使Debug
实现打印为非调试代码,但是恕我直言,这是一个hack,并且不仅需要这样做,还需要更多代码简单明了的打印。如果您想破解,请查看the anyhow
crate。
为此添加额外的依赖关系可能会过大,但是您可以使用terminator
条板箱,该条板箱提供了一种新的错误类型,该错误类型将从main
返回,并委托给{{ 1}}实现(通过Display
打印)。然后您的示例将如下所示……
Debug
...,输出将是这样:
use terminator::Terminator;
fn main() -> Result<(),Terminator> {
Err("May
June")?
}