我有一个偶尔为空或不存在的数组。我不断收到一条错误消息,说它不存在,但显然是这样。以下是错误消息:
追踪(最近一次通话): 文件“C:\ Users \ ab67322 \ Desktop \ python \ Weather \ weatheropen1.1.py”,第23行,in rain = n ['rain'] KeyError:'rain'
非常感谢任何帮助。
NMNorthzip=[87401,87301]
for x in NMNorthzip:
r = requests.get("http://api.openweathermap.org/data/2.5/forecast?zip="+str(x)+",us&appid=id")
data = r.json()
forecast = data['list']
pprint(forecast)
for n in forecast:
if n['rain'] is None:
print ("empty")
else:
print(n['rain'])
输出>>>
{'clouds': {'all': 92},
'dt': 1494093600,
'dt_txt': '2017-05-06 18:00:00',
'main': {'grnd_level': 822.44,
'humidity': 62,
'pressure': 822.44,
'sea_level': 1018.05,
'temp': 292.882,
'temp_kf': 0,
'temp_max': 292.882,
'temp_min': 292.882},
'rain': {'3h': 0.125},
'sys': {'pod': 'd'},
'weather': [{'description': 'light rain',
'icon': '10d',
'id': 500,
'main': 'Rain'}],
'wind': {'deg': 143.002, 'speed': 3.11}}]
答案 0 :(得分:1)
您可以检查密钥rain
是否存在
for n in forecast:
if 'rain' in n:
print(n['rain'])
else:
print('empty')
答案 1 :(得分:0)
您假设您对requests..get()
的通话成功。您可能遇到网络问题,DNS失败,服务器关闭或拒绝连接......
您可以查看回复状态代码:
>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200
请求还附带内置状态代码查找对象,以便于参考:
>>> r.status_code == requests.codes.ok
True
如果您提出了错误的请求(4XX客户端错误或5XX服务器错误响应),您可以使用Response.raise_for_status()进行提升:
>>> bad_r = requests.get('http://httpbin.org/status/404')
>>> bad_r.status_code
404
>>> bad_r.raise_for_status()
Traceback (most recent call last):
File "requests/models.py", line 832, in raise_for_status
raise http_error
requests.exceptions.HTTPError: 404 Client Error
答案 2 :(得分:0)
forecast
是字典,字典有密钥。您有语句for n in forecast:
,它会将此词典中的每个键一次分配给n
一个。在某些时候,n
将设置为rain
不可订阅(它既不是列表也不是字典)。
如果你想知道下雨,那就干掉for
陈述。