使用List时的奇怪循环行为

时间:2016-01-11 01:36:40

标签: python praw

我在stackoverflow做了一点研究,但找不到任何东西......也许是因为我真的不知道该找什么。 我写了一个脚本来添加reddit注释(从其中一个提交)到wordpress。一切都很好,工作没有任何问题...但是在循环中有一个奇怪的行为我完全不明白。 让我们从示例代码开始(它是名为“generuj”的函数的一部分):

komment = WordPressComment()
mySubmissionId = submission.id
komentarze = r.get_submission(submission_id=mySubmissionId)
komentarze.replace_more_comments(limit=0, threshold=1)
flat_comments = praw.helpers.flatten_tree(komentarze.comments)

上面的代码没关系,但我把它放在了更好的理解上 每次提交都有不同数量的评论,但不多 超过200 ..所以有时很少像5,有时即184 它们存储在flat_comments中

    listaKomentarzy = []
    for comment in flat_comments:
        if (str(comment.body).__len__() > 20 and str(comment.body).__len__() < 50 and not 'sometestword' in str(comment.body)):
        try:
            listaKomentarzy.append(str(comment.body))

        except:
            e = sys.exc_info()[0]
            print e

        else:
            print (Fore.RED + Style.DIM + "wrong comment")


print len(listaKomentarzy) #to be sure that all comments are in listaKomentarzy

longKom = max(listaKomentarzy, key=len)
indeks = listaKomentarzy.index(longKom)
del listaKomentarzy[indeks]

这里我删除了最长的评论并且它有效......所以在这一点上,一切仍然或者至少看起来像是工作正常。 然而噩梦从这里开始:

for row in listaKomentarzy:
    komment.content = row
    print row

上面的代码是generuj函数的一部分,它也在for循环中运行,遍历每次提交(然后每次运行都会获得新的注释) 简化此代码运行功能:

generuj()
del listaKomentarzy

我使用del listaKomentarzy确保每次循环开始时都是空的 所以我的问题如下:

for row in listaKomentarzy:
    komment.content = row
    print row

脚本工作正常,一切正常......脚本正在打印每个评论(打印行),因为它应该是...但有时它不会。一定有一些奇怪的评论,列表或其他东西,我不知道什么是exacly ..我的第一个想法是有一个限制可以存储在python列表中的多少评论,但我发现可能有很多比我存储在listaKomentarzy(最多200个)。

我不知道我的原因是什么打破了for循环。唯一不止改变的是评论。为了更好地解释它,我将向您展示示例。 可以说有5个提交, 首先有10条评论, 第二次有20条评论, 第三条有30条评论, 第四次有40条评论, 第五名有50条评论,

我运行一个脚本,它从submission1加载10条评论并打印: comment1,comment2,comment3 ... comment10 然后代码确实清除listaKomentarzy中的注释列表 接受submission2并加载20条评论并打印: comment1,comment2,comment3 .... comment20 然后代码确实清除并加载30条评论提交3然后 没有任何事情发生(它甚至不打印一条评论)打破循环和 加载submission4与40条评论并打印所有40条评论没有问题 然后它加载submission5与50条评论和休息没有打印

(没有错误,服务器日志中没有信息) 我不知道从这个代码再次开始... 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我找到了答案 编码存在问题,但与我完全不同的地方

我不得不改变

str(comment.body).__len__()

要     str(comment.body.encode(&#39; ascii&#39;,&#39;忽略&#39;))。 len ()