Python报错列表索引必须为int或float而非str类型如何解决
报错核心原因
- 触发「列表索引必须为int或float类型而非str类型」报错的直接原因:NewsAPI返回的响应结构中,
news_dict["articles"]对应的值是Python列表类型,列表仅支持整数、浮点值做索引,不支持字符串类型的键做索引。你写的news_dict["articles"]["title"]代码,直接把字符串"title"当索引去操作列表,完全不符合列表的索引规则,就会触发报错。 - 逻辑错配点:单条新闻的
title字段,是存放在articles列表的每一个元素(单条新闻的独立字典)里的,不是直接作为键挂在articles这个列表对象下的。 - 冗余写法问题:给
requests.get方法传data="hello"属于不规范操作,GET请求没有请求体语义,这部分参数不会直接触发报错,但属于完全多余的写法。
修正后的可运行代码
import requests import json # 移除GET请求冗余的data参数 url = "http://newsapi.org/v2/top-headlines?country=in&apiKey=ac871f6d1b7b4f46bd71d9c4df281f12" # 直接请求获取响应文本 news_resp_text = requests.get(url=url).text news_dict = json.loads(news_resp_text) # articles是列表,遍历列表里的每个新闻字典提取title all_titles = [news_item["title"] for news_item in news_dict["articles"]] print(all_titles)
调试避坑提示
- 对接第三方API时,先打印一次返回字段的类型(比如
print(type(news_dict["articles"]))),确认结构后再做取值操作,就能避免类型不匹配的低级错误。 - 如果只需要获取单条新闻的标题,要先给列表传整数索引定位到具体新闻条目,再用字符串键取对应字段,比如取返回列表里的第一条头条标题:
news_dict["articles"][0]["title"]
内容的提问来源于stack exchange,提问作者Abhimanyu Sharma
相关产品推荐
相关产品推荐

