如果我有这样的文件:
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)
)?
但这只会使情况变得更糟:Error: "\"May\\nJune\""
最佳答案
您必须自己打印错误,而不要依赖默认的后备实现。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。
关于string - 返回结果,带无引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64515358/