TypeError: ‘Response’ 对象在 Python 中不可订阅

TypeError: ‘Response’ 对象在 Python 中不可订阅

TypeError: ‘Response’ object is not subscriptable in Python

Python“TypeError: ‘Response’ object is not subscriptable”发生在我们尝试访问 Response 对象中的键而不先解析它时。

要解决该错误,请使用该json()方法将 JSON 响应解析为原生 Python 对象,例如res.json().

类型错误响应对象不可订阅

下面是错误如何发生的示例。

主程序
import requests def make_request(): res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'manager'} ) # ⛔️ TypeError: 'Response' object is not subscriptable print(res['name']) make_request()

代码示例中的问题是该Response对象不仅仅存储响应数据。

json()通过调用方法解析JSON响应

解决方法是调用json()上的方法Response将JSON响应对象解析成Python原生对象。

主程序
import requests def make_request(): res = requests.post( 'https://reqres.in/api/users', data={'name': 'Bobby Hadz', 'job': 'manager'} ) # ✅ parse JSON response to native Python object data = res.json() # 👇️ {'name': 'Bobby Hadz', 'job': 'manager', 'id': '649', 'createdAt': '2022-05-20T10:11:23.939Z'} print(data) print(data['name']) # 👉️ "Bobby Hadz" print(data['job']) # 👉️ "manager" print(data['id']) # 649 make_request()

在访问其任何键之前,我们调用对象json()上的方法Response将其解析为本机 Python 对象。

您应该使用该json()方法来解析来自所有请求的数据,而不仅仅是 HTTP POST

“TypeError: object is not subscriptable”意味着我们正在使用方括号来访问特定对象中的键或访问特定索引,但是,该对象不支持此功能。

要解决该错误,请将对象转换为字典(或列表)或其他可订阅的数据结构。

您应该只使用方括号来访问可订阅对象。

Python 中的可订阅对象是:

  • 列表
  • 元组
  • 字典
  • 细绳

必须使用list()
tuple()
dict()
str()类将所有其他对象转换为可订阅对象
,以便能够使用括号表示法。

可订阅对象实现该__getitem__方法,而非可订阅对象不实现。

主程序
a_list = [2, 4, 6, 8] # 👇️ <built-in method __getitem__ of list object at 0x7f71f3252640> print(a_list.__getitem__)