Return 包含未加引号的字符串的结果
Return Result with unquoted string
如果我有这样的文件:
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
版本(字符串被转义)。它旨在作为示例或围栏的快速'n'dirty 解决方案,而不是用于任何人都会关心输出表示的真实程序。
使用:
fn main() {
if let Err(e) = run() {
eprintln!("{}", e);
std::process::exit(1);
}
}
fn run() -> Result<(), Box<dyn Error>> {
// etc
}
它将使用 Display
格式打印错误。
main()
的 built-in 错误处理没有什么特别之处,因此您自己打印错误不会丢失任何东西。
还有一个替代解决方案,即在错误上实现自定义 Debug
实现,使 Debug
实现打印出 non-debug 一个,但恕我直言,这是一种 hack,需要更多代码而不仅仅是简单的打印。如果你想要那个 hack,看看 the anyhow
crate。
为此引入额外的依赖项可能有点矫枉过正,但您可以使用 terminator
包,它提供了一种新的错误类型,旨在从 main
返回,委托给Display
使用 Debug
打印时的实现。那么您的示例将如下所示...
use terminator::Terminator;
fn main() -> Result<(), Terminator> {
Err("May
June")?
}
...输出将是这样的:
Error: May
June
如果我有这样的文件:
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
版本(字符串被转义)。它旨在作为示例或围栏的快速'n'dirty 解决方案,而不是用于任何人都会关心输出表示的真实程序。
使用:
fn main() {
if let Err(e) = run() {
eprintln!("{}", e);
std::process::exit(1);
}
}
fn run() -> Result<(), Box<dyn Error>> {
// etc
}
它将使用 Display
格式打印错误。
main()
的 built-in 错误处理没有什么特别之处,因此您自己打印错误不会丢失任何东西。
还有一个替代解决方案,即在错误上实现自定义 Debug
实现,使 Debug
实现打印出 non-debug 一个,但恕我直言,这是一种 hack,需要更多代码而不仅仅是简单的打印。如果你想要那个 hack,看看 the anyhow
crate。
为此引入额外的依赖项可能有点矫枉过正,但您可以使用 terminator
包,它提供了一种新的错误类型,旨在从 main
返回,委托给Display
使用 Debug
打印时的实现。那么您的示例将如下所示...
use terminator::Terminator;
fn main() -> Result<(), Terminator> {
Err("May
June")?
}
...输出将是这样的:
Error: May
June