【问题标题】:Python documentation on possibly inherited method关于可能继承的方法的 Python 文档
【发布时间】:2018-07-11 16:09:28
【问题描述】:

我正在编写一个程序(python Python 3.5.2),它使用 HTTPSConnection 获取 JSON 对象作为响应。我使用一些示例代码让它工作,但不确定方法来自哪里。 我的问题是:在下面的代码中,“21.12.2.HTTPResponse 对象”下的https://docs.python.org/3.4/library/http.client.html#http.client.HTTPResponse 的文档中不存在 decode('utf-9') 方法。我怎么知道“response.read()”方法的返回值有“decode('utf-8')”方法可用?

Python 对象是否像 C# 对象一样从基类继承,还是我遗漏了什么?

http = HTTPSConnection(get_hostname(token))
http.request('GET', uri_path, headers=get_authorization_header(token))
response = http.getresponse()

print(response.status, response.reason)
feed = json.loads(response.read().decode('utf-8'))

感谢您的帮助。

【问题讨论】:

  • HTTPResponse.read() 返回一个 bytes 对象 - 这在文档中不是很清楚,但实际上没有其他可能。 .decode()bytes的一个方法,和HTTPResponse没有联系。
  • source 清楚地表明返回了 bytes 对象。

标签: python object methods


【解决方案1】:

响应对象的read 方法总是返回一个字节字符串(在 Python 3 中,我假设您在使用 print 函数时正在使用它)。字节串确实有decode方法,所以这段代码应该没有问题。当然,它假设响应是用 UTF-8 编码的,这可能正确也可能不正确。

[技术说明:电子邮件是一种非常难以处理的媒介:消息可以由不同的部分组成,每个部分都有不同的编码。至少对于网络流量,您有机会阅读 Content-Type 标头的 charset 属性以找到正确的编码]。

【讨论】:

  • 谢谢!这确实解释了。我当然希望文档有某种链接,我可以通过它来获取该信息,如果我将来不会遇到类似的情况,它会让我徘徊。这段代码实际上来自 Sharefile 的 API。我有其他代码充当 SMTP 服务器,它将从我知道将发送哪种附件的系统接收,所以我几乎只接受具有列表中存在的文件扩展名的部分。最终,我将把它与一些日志记录在一起。
  • 我猜你使用 Python 的时间还不够长,还没有理解交互式解释器的价值。能够尝试一些事情,查询返回值的类型等等真的可以帮助你了解代码中发生了什么。 “用抹子编程”是一种非常有效的学习方式,但您可能希望更深入地研究该语言以提高您的工作效率。
  • 哦,你可能想看看requests 库——它比http.client 更容易使用。这是仅仅举起例子的一个缺点——作者可能没有那么精通 Python,只需要一个“工作”的例子。
  • 谢谢,我过去的大部分开发都是使用 Perl。我对 Python 比较陌生,并且正在学习我的方式。不幸的是,我发现自己需要尽快完成工作,而我的工作需要我戴很多帽子,并且限制了我如何专注于一个特定的主题。我不喜欢它,因为我没有得到关于事物的完整教育,这有点令人沮丧。我将专注于交互式解释器,因为我觉得它很有趣,但我现在绝对可以看到它的价值。
猜你喜欢
  • 2019-05-03
  • 1970-01-01
  • 2011-12-27
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多