【问题标题】:How do I skip a requests response with no valid json?如何跳过没有有效 json 的请求响应?
【发布时间】:2015-08-18 04:27:12
【问题描述】:

我在地理编码过程中使用请求来循环大量文本并返回坐标,如下所示:

for t in text:
    payload = {"q":t}
    located = requests.get("http://localhost:8999/CLIFF-2.1.1/parse/text", params=payload)
    l = located.json()
    for i in l['results']['places']['focus']:
        print i['name']
        print i['lat']
        print i['lon']

在大多数情况下,这可以正常工作,但在某些情况下No JSON object could be decoded。有没有办法跳过这段 JSON 并继续迭代? (也许是一个while循环?)

这可能是一个非常简单的问题,但我似乎无法找到答案......而且可能是我处理这一切都错了。让我知道是否有任何需要澄清的地方。提前致谢!

顺便说一句,text 是由另一个函数生成的文本对象列表。

【问题讨论】:

  • 有没有办法跳过这段 JSON 并继续迭代? 我相当肯定异常发生在 located.json() 调用中,所以没有进位在迭代。如果 json 错误,您要么必须捕获异常并跳过所有内容,要么自己编写 json 解析器
  • 好的,谢谢。我必须找到另一种方法来做到这一点......
  • 您可能还想检查located.status_code,看看如果没有返回 JSON 是否有任何区别。
  • 我检查了status_code raise_for_status 并得到了requests.exceptions.HTTPError: 400 Client Error: Bad Request。事情是我已经知道这是一个糟糕的要求!不太确定从这里到哪里去。

标签: json python-2.7 python-requests


【解决方案1】:

您可以简单地捕获ValueErrorjson 模块无法解码响应时引发的continue,然后迭代text

for t in text:
    payload = {"q": t}
    located = requests.get("http://localhost:8999/CLIFF-2.1.1/parse/text", params=payload)

    try:
        l = located.json()
    except ValueError:
        # No JSON object could be decoded - skip this item
        # and continue with the next item in `text`
        continue

    for i in l['results']['places']['focus']:
        print i['name']
        print i['lat']
        print i['lon']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2012-02-24
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多