我正在尝试使用此代码让 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/