You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:02