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)
您必须自己打印错误,而不是依赖默认的回退实现。
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箱子。