string - 返回结果,带无引号的字符串

标签 string error-handling rust quotes

如果我有这样的文件:

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/

相关文章:

c# - 字符串数组拆分 - 字符串 [] 到字符串错误

error-handling - 我可以在“404未找到文件”错误处理页面中包括哪些技术功能?

node.js - 以 Angular 返回可观察值时如何处理错误?

rust - 模式匹配借用内容问题

macros - 如何消除宏中的虚假警告 "value assigned is never read"?

c++ - 如何将字符串(包含双最大值)转换为 double

javascript - 如何区分时间字符串和非时间字符串

error-handling - sei ^ 2 : non-numeric argument to binary operator, in metafor中的错误

rust - 如何使用 lazy_static!在结构实现中?

Java在编码/解码时将字符串分解为垃圾