std :: result :: Result <reqwest :: Response,reqwest :: Error>`无法使用默认格式化程序格式化

如何解决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输入,这种情况也会引起恐慌。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?