无法通过PRAW从某些子redredit中获得随机帖子

问题描述 投票:2回答:1

我正试图使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上发生,例如在r / memes中从未发生过,但是在我尝试使用r / thighdeology(nsfw)的任何时候发生

python-3.x praw
1个回答
2
投票

这是Reddit的已知问题。

某些分类表示将拒绝给您随机提交的内容。请参阅GitHub上的praw-dev/praw#885

关于这个问题,我went in depth关于原因。我的发现是:当子目录管理员在其子目录设置中取消选中“允许子目录在/ r / all,/ r / popular,默认和趋势列表中向用户公开此子目录时,它防止了该子目录被可以提供随机提交。例如,在撰写本文时,https://reddit.com/r/wallpapers/random只是重定向到https://www.reddit.com/r/wallpapers/而不是某些提交。

[我个人认为,这是Reddit错误,它是由/r/random(重定向到随机subreddit)和/r/{subreddit}/random(重定向到subreddit中的随机提交)引起的。就目前而言,该复选框会影响这两个设置,在我看来,只有影响/r/random才有意义。

在同一GitHub问题中,一个Reddit开发人员插话确认"the two behaviors are connected",并说这种行为"isn't a bug per se."那是两年多以前了,此后Reddit的一切都没有改变。


那么,这对您意味着什么?

不幸的是,没有解决此问题的好方法。如您所知,对于某些子redredit,subreddit.random()返回None。这是noted in the documentation of the method。在代码中,应检查post是否不是None。在None的情况下,如何处理取决于您。您可以只返回None,或者可以使用其他方法来获取随机提交,例如(例如)从热门列表中获取25个提交,然后使用random.choice()选择一个。

© www.soinside.com 2019 - 2024. All rights reserved.