阅读JSON文件有时工作,有时不工作(Python)

时间:2017-03-17 15:38:25

标签: python json

以下是与之相关的代码的最高位:

url1 = "https://www.reddit.com/r/todayilearned/new/.json"
response = urllib.urlopen(url1)
data = json.loads(response.read())
tiloriginal = []

    for post in data["data"]["children"]:
        tilfact = post["data"]["title"]

所以奇怪的是,我的代码运行正常。但是,我喜欢2/5的时间,它给了我以下错误:

    for post in data["data"]["children"]:
KeyError: 'data'

当我再次运行脚本时,它工作正常。但是当我再次运行它时,它会再次给我错误。

每次运行完全相同的代码,但只有有时才会给我这个错误。

任何帮助,为什么会这样?我的代码有问题吗?我的互联网?

1 个答案:

答案 0 :(得分:2)

您应该首先检查响应代码。

In [44]: url1 = "https://www.reddit.com/r/todayilearned/new/.json"

In [45]: requests
Out[45]: <module 'requests' from '.../env/lib/python3.6/site-packages/requests/__init__.py'>

In [46]: requests.get(url1)
Out[46]: <Response [429]>

In [47]: requests.get(url1)
Out[47]: <Response [200]>

In [48]: requests.get(url1)
Out[48]: <Response [200]>

In [49]: requests.get(url1)
Out[49]: <Response [429]>

In [50]: 

在这里,您可以看到有大约200个(成功)和大约429个(太多请求)。

如果您使用请求第三方库,这很容易:

In [52]: r=requests.get(url1)

In [53]: r
Out[53]: <Response [429]>

In [54]: r.status_code
Out[54]: 429

那么你要做的是一个while循环检查(比方说)3或5次?

像:

r = requests.get(url1)
status_count = 0
while r.status_code == 429 and status_count < 3:
    r = requests.get(url1)
    status_count += 1

例如

(我只检查429 - 在这种情况下请求太多,因为我不想掩盖其他代码,如404或500等)

哦,还有一件事 - 假设这些是429的 - 在{while}语句的开头添加import time; time.sleep(1)类型的东西可能是明智的。