基于tkinter的NewsAPI新闻应用出现KeyError:'articles'报错如何解决?
错误原因及修复方案
核心报错原因
- URL拼接错误:你构造请求地址的代码中,
apiKey"+api_key缺少等于号,正确格式应为apiKey=,导致请求没有携带合法的API密钥,NewsAPI返回的错误响应中不存在articles字段,直接取值就触发了KeyError。 - 缺少结果校验逻辑:没有提前判断API请求是否成功、响应结构是否符合预期,直接强行取
articles字段很容易触发异常。 - 额外逻辑错误:遍历所有新闻的循环和取前5条的循环嵌套错误,会导致内容重复拼接,且当返回新闻不足5条时会触发索引越界问题。
修复后完整代码
import requests import tkinter as tk #to create a GUI def getNews(): api_key = "替换为你自己的NewsAPI有效密钥" # 修正URL拼接的等于号问题 url = "https://newsapi.org/v2/top-headlines?country=us&apiKey="+api_key response = requests.get(url) # 增加HTTP请求状态校验 if response.status_code != 200: label.config(text = "请求失败,请检查网络连接") return news = response.json() # 增加API返回结果校验 if news.get("status") != "ok" or "articles" not in news: error_msg = news.get("message", "未知错误") label.config(text = f"获取新闻失败:{error_msg}") return articles = news["articles"] my_news = "" # 取最多5条,避免索引越界 show_count = min(5, len(articles)) for i in range(show_count): my_news = my_news + str(i+1) + ". " + articles[i]["title"] + "\n" # 统一更新GUI内容 label.config(text = my_news) #define the canvas of the GUI canvas = tk.Tk() canvas.geometry("900x600") canvas.title("Your latest news") button = tk.Button(canvas, font = 25, text = "Update my news", command = getNews) button.pack(pady = 25) label = tk.Label(canvas, font = 20, justify = "left") label.pack(pady = 25) #call the function getNews() #create a loop canvas.mainloop()
其他注意事项
如果修改URL后仍报错,需要确认你填写的api_key是NewsAPI官网申请的有效密钥,没有超出请求频次限制。
内容的提问来源于stack exchange,提问作者dizzy_isi
相关产品推荐
相关产品推荐

