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__)