如何解决std :: result :: Result <reqwest :: Response,reqwest :: Error>`无法使用默认格式化程序格式化
对于rust来说,我是新手,我试图获取请求响应主体,我当前的代码是:
let client = reqwest::Client::new();
let response_text = client.get("google").send();
println!("{}",response_text);
但这会产生错误
std::result::Result<reqwest::Response,reqwest::Error>` cannot be formatted with the default formatter
解决方法
简短版
使用"{:?}"
代替"{}"
调试输出。
长版
我必须修改您的代码以获取相同的错误消息:
pub fn dummy() {
let client = reqwest::blocking::Client::new();
let response_text = client.get("google").send();
println!("{}",response_text);
}
,它使用阻止API而不是异步API。异步API给出了类似但略微复杂的错误。
完整的错误消息是:
error[E0277]: `std::result::Result<reqwest::blocking::Response,reqwest::Error>` doesn't implement `std::fmt::Display`
--> src/lib.rs:5:20
|
5 | println!("{}",response_text);
| ^^^^^^^^^^^^^ `std::result::Result<reqwest::blocking::Response,reqwest::Error>` cannot be formatted with the default formatter
|
= help: the trait `std::fmt::Display` is not implemented for `std::result::Result<reqwest::blocking::Response,reqwest::Error>`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
= note: required by `std::fmt::Display::fmt`
= note: this error originates in a macro (in Nightly builds,run with -Z macro-backtrace for more info)
第一行给出根本原因std::result::Result<reqwest::blocking::Response,reqwest::Error>
未实现std::fmt::Display
。
问题在于,用“ {}”格式化需要一个对象支持std::fmt::Display
,而Result对象不支持。 (您可以通过查看它在https://doc.rust-lang.org/std/result/enum.Result.html上实现的特征列表来进行检查)
Result
确实实现了std::fmt::Debug
,只要它的两个参数都可以,
就像这里的情况一样。
这是必须使用"{:?}"
而不是{}
进行格式化的特征。
如果您不想调试输出,则需要更加努力地获取内容。您想要类似的东西
match response_text {
Err(e) => eprintln!("Error: {:?}",e);
Ok(v) => println!("Body: {}",v.text().unwrap();
}
但是,即使这样不能正确处理非UTF8输入,这种情况也会引起恐慌。