列表长度是< 100

时间:2015-08-04 19:09:38

标签: python

我正在努力让这个循环工作在python中。

urlList = []
while True: 
    for r in range(1, 5000):
        try:
            response =  urllib.request.urlopen('www.somewebsite.com/v0/info/' + str(r) + '.json')
            html = response.read().decode('utf-8')
            data = json.loads(html)
            if 'url' in data:
                urlList.append(data['url'])
                if len(urlList) == 100: break
        except urllib.error.HTTPError as err:
            print (err)
            continue
print (urlList)

如果列表长度等于100,我当前有if语句来打破while循环,这会引发urllib.error.URLError的奇怪错误:

我也试过了len(urlList)!= 100这使得进程没有运行。同时len(urlList)< 100只是使它贯穿整个范围功能。

2 个答案:

答案 0 :(得分:5)

您的网址无效。

response =  urllib.request.urlopen('www.somewebsite.com' + str(r) + '.json')

这变为:

www.somewebsite.com1.json
www.somewebsite.com2.json
www.somewebsite.com3.json
...

这些无效网址会引发urllib.error.HTTPError错误。

现在您已更正了网址,上述内容无效。您遇到的问题是因为break正在突破您的内循环(for)并让您进入while循环,这会再次重复所有内容。

尝试将代码更改为更像:

urlList = []
for r in range(1, 5000):
     response = ......
     ...
     if 'url' in data:
            urlList.append(data['url'])
            if len(urlList) == 100: break

这将删除while循环。它保留了范围,这似乎对您的URL很重要。当列表大小达到100时,它就会突破这个循环。

答案 1 :(得分:0)

你有两个循环,但只有一次。

你应该保持你的休息时间来打破for循环,但是当你写while len(urlList)<100

时,while也应该有条件

两者都应该正确退出你的循环。

关于回复对象的另一条评论 - 致电close()