You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PRAW遍历并删除所有Reddit评论时仅处理100条的问题解决咨询

PRAW仅处理100条Reddit评论后停止,如何删除全部评论?

问题描述

我尝试用PRAW获取自己所有的Reddit评论并删除,编写了以下代码:

import praw
r = praw.Reddit(...)
print("\nFetching all comments ...")
i = len(list(r.user.me().comments.new(limit=None)))
print("Found " + str(i) + " comments. Processing ...")
comments = r.user.me().comments.new(limit=None)
for c in comments:
    c.edit(body="deleted").delete()
    print(" - Comment " + c.id + " deleted, " + str(i - 1) + " to go")
    i = i - 1
print("\nAll done!")

运行后输出(精简版):

Found 268 comments. Processing ...
 - Comment ie8hwqq deleted, 267 to go
...
 - Comment i9txf1j deleted, 168 to go
All done!

奇怪的是,程序只处理了100条评论就停止了。我第一次把可迭代对象转成列表时,确实显示有268条评论,但直接遍历这个可迭代对象时,只处理了从最新的第268条到第169条的100条就退出循环了。请问该怎么解决这个问题?


解决方案

这是个很典型的PRAW使用误区,我来帮你理清楚问题根源和解决办法:

问题出在哪?

你两次调用了r.user.me().comments.new(limit=None):第一次转成列表时,PRAW会自动处理Reddit API的分页逻辑,把所有268条评论都拉取下来;但第二次直接遍历这个生成器时,情况就不一样了——Reddit API的分页默认每次只返回100条数据,而且当你在遍历过程中删除评论,会打乱后续分页请求的游标(cursor),导致迭代器无法继续获取下一页的内容,自然就停在100条了。

修复后的代码

正确的做法是先一次性把所有评论加载到本地列表里,再遍历列表执行删除操作,这样就不会受API分页或内容变化的影响。修改后的代码如下:

import praw
r = praw.Reddit(...)
print("\nFetching all comments ...")
# 一次性拉取所有评论并存储到本地列表
all_comments = list(r.user.me().comments.new(limit=None))
total = len(all_comments)
print(f"Found {total} comments. Processing ...")

remaining = total
for comment in all_comments:
    try:
        # 保持原逻辑:先编辑标记再删除
        comment.edit(body="deleted")
        comment.delete()
        remaining -= 1
        print(f" - Comment {comment.id} deleted, {remaining} to go")
    except Exception as e:
        # 处理异常:比如评论已被手动删除、权限不足等情况
        remaining -= 1
        print(f" - Failed to delete comment {comment.id}: {str(e)}")

print("\nAll done!")

为什么这样能解决问题?

  1. 预加载所有评论:list(...)会触发PRAW自动处理所有API分页请求,把所有评论都存在本地列表里,后续遍历的是本地数据,不会因为删除操作影响后续的获取。
  2. 异常处理兜底:加个try-except能避免因为个别评论的问题导致整个程序中途崩溃,确保能处理尽可能多的评论。
  3. 避免重复API调用:原来的代码两次调用comments.new(...),第二次的生成器没有办法像第一次转列表那样自动拉取所有分页,加上删除操作的干扰,自然就停在100条了。

如果你的评论数量特别多(比如几千条),可以考虑分批次处理,但几百条的情况直接加载到列表完全没问题。


内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:57:31