调用Chess.com API遇TypeError:string indices must be integers求助
解决TypeError: string indices must be integers问题
你的问题出在get_leaderboards().json这一行——当前版本的chessdotcom库中,json是需要调用的方法,而非直接访问的属性。教程代码能运行是因为当时使用的旧版本库中json是属性,库更新后API逻辑发生了变化。
修改代码中的关键行:
data = get_leaderboards().json() # 为json加上括号,调用方法
完整修改后的代码:
from chessdotcom import get_leaderboards import pprint printer = pprint.PrettyPrinter() def print_leaderboards(): data = get_leaderboards().json() # 此处修改为调用json()方法 categories = data.keys() for category in categories: print('Category:', category) for idx, entry in enumerate(data[category]): print(f'Rank: {idx + 1} | Username: {entry["username"]} | Rating: {entry["score"]}') print_leaderboards()
原因说明
直接访问.json属性时,得到的不是解析后的字典,而是一个字符串(或非字典类型)。遍历data[category]时,entry会变成字符串里的单个字符,此时用entry["username"]自然触发错误——因为字符串只能用整数作为索引,不能用字符串键。调用.json()方法后,API响应才会被解析为Python字典,后续的键访问逻辑就能正常执行。
内容的提问来源于stack exchange,提问作者DyBStefan
相关产品推荐
相关产品推荐

