Python解析Slack API嵌套JSON键触发TypeError问题求解
问题排查与修复
错误1:保留[0]时提示TypeError: string indices must be integers
原因:json.loads(response.text)['members']本身就是所有用户组成的列表,你加了[0]之后data就变成了第一个用户的字典对象,遍历字典的时候i拿到的是字典的键(都是字符串,比如id、name),你用i['id']相当于对字符串做字典索引操作,自然报错。
修复:直接取data = json.loads(response.text)['members'],不要加[0]。
错误2:移除[0]后提示TypeError: 'builtin_function_or_method' object is not subscriptable
原因:你写了print[i],print是Python内置函数,方括号[]是下标取值操作,不能用在函数上。
修复:改成print(i),用圆括号传参调用函数。
其他隐藏问题
- 请求异常时只打印错误,后续仍然访问
response.text会触发NameError,因为请求失败时response变量未定义,建议加return终止函数执行 - 建议先判断Slack API返回的
ok字段是否为真,避免接口调用失败时找不到members字段
修复后完整代码
import requests import json def get_slackusers(): uri = "https://slack.com/api/users.list?token=tokenhere" try: response = requests.get(uri) except requests.exceptions.RequestException as error: print(error) return # 请求失败直接终止 res_json = json.loads(response.text) # 先判断接口调用是否成功 if not res_json.get('ok'): print(f"接口调用失败:{res_json.get('error', '未知错误')}") return data = res_json['members'] target_id = 'slackIDhere' for user in data: if user['id'] == target_id: print(user) return user # 找到后可以直接返回,避免继续循环
内容的提问来源于stack exchange,提问作者curtcab
相关产品推荐
相关产品推荐

