python-3.x - 无法使用 PRAW 从某些 Reddit 子版 block 中获取随机帖子

标签 python-3.x praw

我正在尝试使用此代码让 disord 机器人从 reddit 发送图像(只是为了抓取而不是发送)

def random_post(subreddit):
while True:
    post = reddit.subreddit(subreddit).random()
    if not post.stickied:
        return post

它通常工作正常,但每隔一段时间我就会收到此错误

AttributeError: 'NoneType' object has no attribute 'stickied'

这只发生在某些 Reddit 子版 block 上。

最佳答案

这是 Reddit 端的一个已知问题。

一些 Reddit 子版 block 将拒绝为您提供随机提交。请参阅praw-dev/praw#885在 GitHub 上。

在这个问题上,我went in depth关于原因。我的发现是:当 subreddit 的版主取消选中其 subreddit 设置中的“允许该 subreddit 向/r/all、/r/popular、默认和趋势列表中的用户公开”复选框时,它会阻止该 subreddit能够提供随机提交。例如,在撰写本文时,https://reddit.com/r/wallpapers/random只是重定向到 https://www.reddit.com/r/wallpapers/而不是提交一些内容。

在我个人看来,这是一个 Reddit 错误,由 /r/random (重定向到随机 subreddit)和 /r/{subreddit}/random 之间的混淆引起的code> (重定向到 Reddit 子版 block 内的随机提交)。就目前情况而言,该复选框会影响这两个设置,但在我看来,它只有影响 /r/random 才有意义。

在同一 GitHub 问题中,一位 Reddit 开发人员插话确认 "the two behaviors are connected"并表示这种行为"isn't a bug per se."那是两年多前的事了,自那以后 Reddit 端没有任何变化。


这对您来说意味着什么?

不幸的是,没有好的方法可以解决这个问题。正如您所发现的,对于某些 subreddits,subreddit.random() 返回 None。这是noted in the documentation of the method 。在您的代码中,您应该检查 post 是否为 None。如果是 None,则由您决定如何处理。您可以只返回 None,或者您可以使用替代方法来获取随机提交,例如(例如)从热门列表中获取 25 个提交并使用 random.choice()选择一个。

关于python-3.x - 无法使用 PRAW 从某些 Reddit 子版 block 中获取随机帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60216514/

相关文章:

python - 将变量设置为导入它的模块的名称

Django 信号重定向

python - 使用 PRAW 进行 Reddit 搜索时经常收到 503 错误

python - 有没有办法合并帖子/评论流?

python - 将对象列表写入 csv 文件

Python3 pathlib 单行代码用于检查 Path 是否至少有一个特定扩展名的文件

python - Tensorflow py3.5 从源代码 : "not a supported wheel"? 安装

python - 从没有 'submissions' 的 subreddit 获取所有提交

python - 在 Flask 中打印列表

python - 在 Linux 上将 PIL 图像转换为视频