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

Python新手调用OpenWeather免费API返回404内部错误的排查与解决

解决OpenWeather API返回404 Internal Error的问题

嘿,我一眼就瞅到问题所在了——你用的API URL版本不对!这是新手用OpenWeather API时超常见的小坑,调整几下就能搞定。

核心问题:API版本号错误

你代码里的base_url写的是http://api.openweathermap.org/data/2.0/weather?,但OpenWeatherMap当前免费版的稳定API版本是2.5,2.0版本早就不维护了,这就是你收到内部错误的主要原因。

修正方案+实用优化

我给你调整了代码,还加了几个能避免后续踩坑的优化点:

import requests

api_key = '你的API密钥'
# 1. 修正API版本为2.5,改用更安全的https协议
base_url = 'https://api.openweathermap.org/data/2.5/weather'
city_name = input("Type city name : ")

# 2. 使用params参数自动处理URL编码(比如New York的空格会自动转成合规格式)
#    比手动拼接字符串靠谱多了,能避免特殊字符导致的请求失败
params = {
    'appid': api_key,
    'q': city_name
}

response = requests.get(base_url, params=params)
x = response.json()

print(x)
if x["cod"] == "404":
    print("The City Could Not Be Found!")
else:
    y = x['main']
    current_temperature = y["temp"]
    current_pressure = y["pressure"]
    current_humidity = y["humidity"]
    z = x["weather"]
    weather_description = z[0]["description"]
    # 用f-string让输出代码更简洁好读
    print(f"Temperature (in kelvin unit) = {current_temperature}\n"
          f"atmospheric pressure (in hPa unit) = {current_pressure}\n"
          f"humidity (in percentage) = {current_humidity}\n"
          f"description = {weather_description}")

额外排查点(如果还是不行的话)

  • 再核对一遍API密钥:确保复制的时候没带多余的空格、换行符,直接从OpenWeather控制台复制最稳妥
  • 检查API调用次数:免费版限制60次/分钟、1000次/天,别不小心超限了
  • 试试用城市ID请求:如果城市名有歧义(比如重名城市),可以用城市ID代替名称,比如纽约的ID是5128581,把params改成{'appid': api_key, 'id': 5128581}测试

内容的提问来源于stack exchange,提问作者Andres Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:07:30