在Python中如何确保列表中的项目成功处理

时间:2015-08-27 02:29:14

标签: python list

我试试这个:

for k in  keywords_list:
    google_add = random.choice(google_adds_list)
    url = make_up_url(google_add, k, False)
    if scrape_keyword_count(k, useragent_list, url, result_dir):
        keyword_count = scrape_keyword_count(k, useragent_list, url, result_dir)
        all_keyword_count.append(keyword_count)
        print '%s Finish. Removeing it from the list' % k
        keywords_list.remove(k)
    else:
        print "%s may run into problem, removing it from list" % google_add
        google_adds_list.remove(google_add)
        with open(google_adds, 'w') as f:
            f.write('\n'.join(google_adds_list))

我为谷歌设置了许多反向代理服务器。服务器列表是google_add_list 我的意思是使用add i provide搜索列表中的所有项目并获取结果 如果谷歌阻止了我,scrape_keyword_count()将返回None。然后我 我需要改为另一个添加来进行搜索。但我编写的脚本将跳过关键字,无论scrape_keyword_count()成功与否

我知道在for循环中删除一个项目很危险我将在以后改进这部分

3 个答案:

答案 0 :(得分:2)

这里的问题是你在迭代时修改列表。

在the_list [:]"中使用"代替。这将遍历列表的副本,修复您的"跳过" (遗漏元素)问题。

答案 1 :(得分:0)

也许:

new_list = []
for i in the_list:
    if do_something_with(i):
       continue
    do_something_else(i)
    new_list.append(i)

如果do_something_with(i)成功,则继续下一个项目do_something_else(i)

在迭代列表时,您不能改变列表。如果需要过滤列表,而不是从旧列表中删除元素,则生成一个新元素。

答案 2 :(得分:0)

for循环将使用每个项目一次......你的代码看起来很好......但我认为你可能没有在do_something_with中返回正确的值

试试这个:

for i in the_list:
    value = do_something_with(i)
    print bool(value)
    if value:
        the_list.remove(i)
    <etc> <etc>

我认为你可能总是从do_something_with

返回True