Python 解析 JSON 时出错

标签 python request wunderground

我正在开发一种机器学习算法来预测我所在城市的温度。我正在使用 wunderground API 来获取数据。因此,在这段代码中我执行了对 API 的请求:

def extract_weather_data(url, api_key, target_date, days):  
records = []
for _ in range(days):
    request = BASE_URL.format(API_KEY, target_date.strftime('%Y%m%d'))
    response = requests.get(request)
    print request
    if response.status_code == 200:
        data = response.json()['history']['dailysummary'][0]
        records.append(DailySummary(
            date=target_date,
            meantempm=data['meantempm'],
            meandewptm=data['meandewptm'],
            meanpressurem=data['meanpressurem'],
            maxhumidity=data['maxhumidity'],
            minhumidity=data['minhumidity'],
            maxtempm=data['maxtempm'],
            mintempm=data['mintempm'],
            maxdewptm=data['maxdewptm'],
            mindewptm=data['mindewptm'],
            maxpressurem=data['maxpressurem'],
            minpressurem=data['minpressurem'],
            precipm=data['precipm']))
    time.sleep(6)
    target_date += timedelta(days=1)
return records  

records = extract_weather_data(BASE_URL, API_KEY, target_date, 100)

我在 3-4 次请求后收到此错误:

 Traceback (most recent call last):
 File "data.py", line 45, in <module>
 records = extract_weather_data(BASE_URL, API_KEY, target_date, 100)
 File "data.py", line 26, in extract_weather_data
 data = response.json()['history']['dailysummary'][0]
 File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 892, in json
 return complexjson.loads(self.text, **kwargs)
 File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
 return _default_decoder.decode(s)
 File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
 File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode
 obj, end = self.scan_once(s, idx)
 ValueError: Expecting property name enclosed in double quotes: line 11 column 1 (char 155)

我该如何解决这个问题?

非常感谢您!

最佳答案

涉及 HTTP 请求(无论是否为 API,无论预期响应的内容类型如何)的黄金法则是,事情可能随时以多种方式出错,并且一定会出错。一天或一天​​以最意想不到的方式发生,所以如果您希望拥有一个像样的强大客户端程序,您必须准备好处理任何可能的结果。

大多数情况下,这实际上意味着将请求调用包装在 try/except 处理程序中加上测试响应的状态代码、内容类型和有效内容(而不是盲目地假设您得到了您所要求的内容),并根据异常/意外响应值决定是否值得在放弃之前重试请求几次(增加重试之间的延迟)(某些错误情况可能是暂时的)或立即放弃。在所有情况下,当您决定放弃时,您还希望确保让用户知道出了什么问题,并提供尽可能多的信息(请求、响应(如果有)、异常和完整的回溯)。

关于Python 解析 JSON 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886683/

相关文章:

javascript - 检查所有 Ajax 请求何时完成 - 纯 JavaScript

javascript - 获取俄语的日期名称

python - 获取包含特定文本的 td,然后找到其 parent 和 sibling

python - 如何允许 django 管理员将字段设置为 NULL?

Java requestFocus() 在构造函数中不起作用

javascript - 修改响应的 Express.js 中间件

jquery - 温度天气颜色变化

python - IDLE中如何开启行号?

python - Python有同步吗?