数组存在,但无法识别

时间:2017-05-01 18:28:17

标签: python arrays json for-loop

我有一个偶尔为空或不存在的数组。我不断收到一条错误消息,说它不存在,但显然是这样。以下是错误消息:

追踪(最近一次通话):   文件“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}}]

3 个答案:

答案 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陈述。