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
相关产品推荐
相关产品推荐

