调用Roblox徽章接口查多徽章用户出现TypeError列表索引报错如何解决
错误原因
- 核心触发点是代码第35行的
data.append([cursor])语句:你在每次翻页请求完成后,将包装成列表的分页游标值追加到了存储徽章数据的data数组中。 - 当查询的用户徽章数量较少、无需翻页时,while循环不会执行,
data数组内全是接口返回的徽章字典对象,后续遍历取id字段不会出错。 - 当查询的用户徽章数量较多、需要多次翻页时,
data数组会被插入多个[cursor]列表元素,后续列表推导式遍历到这些列表元素时,尝试用字符串'id'作为列表索引,就触发了“列表索引必须为整数或切片,不能是字符串”的类型错误。 - 附带冗余问题:while循环的判断条件已经是
cursor is not None,循环内部的if cursor is None: break判断完全多余;首次请求后的resp.json()调用没有赋值,属于无效代码;代理字典重复定义了http键,导入语句重复引入了json模块。
修复代码
import requests import json import time proxies = {"http": "http://88.198.50.103:8080"} def jprint(obj): text = json.dumps(obj, sort_keys=True, indent=4) print(text) user_id = input("What is the user ID: ") URL = f"https://badges.roblox.com/v1/users/{user_id}/badges" data = [] payload = {"limit": 100, "sortOrder": "Asc"} resp = requests.get(URL, params=payload) blob = resp.json() data.extend(blob["data"]) cursor = blob["nextPageCursor"] while cursor is not None: print("Getting ids") time.sleep(0) payload.update({"cursor": cursor}) resp = requests.get(URL, params=payload, proxies=proxies) blob = resp.json() data.extend(blob["data"]) cursor = blob["nextPageCursor"] id_list = [each['id'] for each in data] print(id_list)
内容的提问来源于stack exchange,提问作者dbcusahi
相关产品推荐
相关产品推荐

