for 循环 - 为什么 range(len()) 会导致 TypeError: int not subscriptable 在这种情况下?

时间:2021-07-22 00:16:38

标签: python loops

我正在处理 JSON 响应的循环,并试图弄清楚为什么在下面的这种情况下我得到一个 TypeError: 'int' not subscriptable

list = []
for i in range(len(json_data['MRData']['RaceTable']['Races'][0]['Results'])):
        list.append(i['FastestLap']['Time']['time'])

print(list)

我只是通过执行 try/except 块解决了这个问题,但我宁愿知道我要迭代的内容的长度。我试着从其他人那里阅读一些关于此的帖子,但无法理解。

2 个答案:

答案 0 :(得分:1)

这是因为 i 是一个整数:list.append(i['FastestLap']['Time']['time'])

试试这个:

results = json_data['MRData']['RaceTable']['Races'][0]['Results']
for i in range(len(results)):
        list.append(results[i]['FastestLap']['Time']['time'])

它将从列表中获取第 i 项。

答案 1 :(得分:0)

您已经在范围内取了 len,因此您将获得 i 的值为 int0len(whateverItIs) - 1。在循环内部,您将 i 视为字典。当您尝试将整数作为可下标对象(如列表或字典)访问时,会引发“typeerror: 'int' object is not subscriptable”错误。

这就是为什么您在这一行中收到该错误的原因:

list.append(i['FastestLap']['Time']['time'])

要克服这个问题,您可以执行以下操作:

dict_val = json_data['MRData']['RaceTable']['Races'][0]['Results']
for element in dict_val:
    list.append(element['FastestLap']['Time']['time'])