我正在尝试使用此代码让一个不和谐的机器人从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 子版块中。
这是 Reddit 端的一个已知问题。
有些 Reddit 子版块会拒绝给你随机提交的内容。看praw-dev/praw#885在 GitHub 上。
在这个问题上,我深入关于原因。我的发现是:当 subreddit 的版主在其 subreddit 设置中取消选中“允许此 subreddit 向 /r/all、/r/popular、默认和趋势列表中的用户公开”复选框时,它会阻止 subreddit 提供随机提交。例如,在撰写本文时,https://reddit.com/r/wallpapers/random只是重定向到https://www.reddit.com/r/wallpapers/而不是某些服从。
在我个人看来,这是一个由 Reddit 之间的混淆引起的错误/r/random
(重定向到随机的 Reddit 子版块)和/r/{subreddit}/random
(重定向到 Reddit 子版块内的随机提交)。就目前而言,该复选框会影响这两个设置,在我看来,只有它影响才有意义/r/random
.
在同一 GitHub 问题中,一位 Reddit 开发人员插话确认:“这两种行为是相关的”并表示这种行为“这不是一个错误per se."那是两年多前的事了,自那以后 Reddit 端没有任何变化。
所以这对于你来说意味着什么?
不幸的是,没有好的方法来解决这个问题。正如您所发现的,对于某些 Reddit 子版块,subreddit.random()
回报None
。这是该方法的文档中注明。在您的代码中,您应该检查post
is not None
。如果是的话None
,这取决于你如何处理。你可以回来None
,或者您可以使用替代方法来获取随机提交,例如(例如)从热门列表中获取 25 个提交并使用random.choice()选择一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)