不带引号的字符串返回结果

0 string error-handling quotes rust

如果我有这样的文件:

use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {   

   Err("May
June")?

}
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

Error: "May\nJune"
Run Code Online (Sandbox Code Playgroud)

是否有可能在输出中获得不带引号的字符串?像这样:

Error: May
June
Run Code Online (Sandbox Code Playgroud)

我试过这个:

Err("May
June").map_err(|e|
   format!("{:?}", e)
)?
Run Code Online (Sandbox Code Playgroud)

但它只会让事情变得更糟:

Error: "\"May\\nJune\""
Run Code Online (Sandbox Code Playgroud)

Kor*_*nel 5

您必须自己打印错误,而不是依赖默认的回退实现。

main() -> Result<…>打印Debug错误的版本(字符串被转义)。它旨在作为示例或游戏围栏的快速解决方案,而不是用于任何人都关心输出呈现的真实程序。

用:

fn main() {
   if let Err(e) = run() {
       eprintln!("{}", e);
       std::process::exit(1);
   }
}

fn run() -> Result<(), Box<dyn Error>> {
   // etc
}
Run Code Online (Sandbox Code Playgroud)

它将使用Display格式打印错误。

main()的内置错误处理没有什么特别之处,因此您自己打印错误不会丢失任何东西。

还有一种替代解决方案,即Debug在错误上实现自定义实现以使Debug实现打印非调试实现,但恕我直言,这是一种黑客行为,需要更多的代码而不仅仅是简单的打印。如果你想要的黑客,看看anyhow箱子