Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在普拉,我';我正试图打印注释正文,但是如果我遇到一条空注释怎么办?_Python_Reddit - Fatal编程技术网

Python 在普拉,我';我正试图打印注释正文,但是如果我遇到一条空注释怎么办?

Python 在普拉,我';我正试图打印注释正文,但是如果我遇到一条空注释怎么办?,python,reddit,Python,Reddit,我正试图打印一个subreddit顶级帖子的所有评论,以便我的机器人能够分析它们。我在当天早些时候运行过它,但我现在尝试运行它,但遇到了一个错误 这是我的密码: r = praw.Reddit('Comment crawler v1.0 by /u/...') r.login('username', 'password') subreddit=r.get_subreddit('subreddit') post_limit = 25 subreddit_posts = subreddit.get_

我正试图打印一个subreddit顶级帖子的所有评论,以便我的机器人能够分析它们。我在当天早些时候运行过它,但我现在尝试运行它,但遇到了一个错误

这是我的密码:

r = praw.Reddit('Comment crawler v1.0 by /u/...')
r.login('username', 'password')
subreddit=r.get_subreddit('subreddit')
post_limit = 25
subreddit_posts = subreddit.get_hot(limit=post_limit)
subids = set()
for submission in subreddit_posts:
    subids.add(submission.id)
subid = list(subids)

i=0
while i < post_limit:
    submission = r.get_submission(submission_id=subid[i])
    flat_comments = praw.helpers.flatten_tree(submission.comments)
    with open('alreadydone.txt', 'r') as f:
        already_done = [line.strip() for line in f]
    f.close()
    for comment in flat_comments:
        if "Cricketbot, give me Australian news" in **comment.body** and comment.id not in already_done:
            info = feedparser.parse(Australia) #Australia gives a link to an RSS feed.
r=praw.Reddit(/u/…'注释爬虫v1.0)
r、 登录('用户名','密码')
subreddit=r.get_subreddit(‘subreddit’)
邮政限额=25
subreddit\u posts=subreddit.get\u hot(limit=post\u limit)
subids=set()
在subreddit_帖子中提交:
subids.add(submission.id)
子ID=列表(子ID)
i=0
当i
星号部分是我的问题所在。我正试图浏览那些写着“板球机器人,给我澳大利亚新闻”的评论。不幸的是,如果注释的主体不在那里,即注释为空,则代码返回一个属性错误,并表示注释没有属性“body”


如何解决这个问题?

添加stacktrace通常会有帮助,这样人们就可以看到实际的错误。但是,作为PRAW的维护者,我知道错误类似于
MoreComments类型没有属性体

有三种简单的方法来处理你的问题。第一种方法是简单地将
if“Cricketbot”
语句包装在try/except中,并忽略属性错误

try:
    if "Cricketbot..."
        ...
except AttributeError:
    pass
但这并不太令人兴奋。第二种方法是确保您实际使用的对象具有
body
属性,这可以通过两种方式完成:

第一个是显式检查属性是否存在:

for comment in flat_comments:
    if not hasattr(comment, 'body'):
        continue
    ...
第二个是验证您实际使用的是
Comment
对象,而不是
morecoments
对象:

for comment in flat_comments:
    if not isinstance(comment, praw.objects.Comment):
        continue
    ...
但是,当运行上述任何解决方案时,您实际上并没有处理提交的所有注释,因为您丢失了
MoreComments
object[]后面隐藏的任何内容。要将
MoreComments
对象替换为一些注释(替换所有注释可能会非常低效),需要在展平树之前使用
replace\u more\u comments
函数:

submission = r.get_submission(submission_id=subid[i])
submission.replace_more_comments(limit=16, threshold=10)
flat_comments = praw.helpers.flatten_tree(submission.comments)
设置
limit=16
threshold=10
意味着发出不超过16个额外请求,并且只发出将导致至少10个额外注释的请求。您可以随意使用这些值,但请注意,每次替换都需要额外的请求(2秒),有些仅产生一条注释


我希望这能有所帮助。

非常感谢!抱歉,这确实是
属性错误:“”没有属性“body”
。我用try-and-except包装了它,它起了作用,但另一个不起作用(读“我不知道如何使用它”)。它似乎会检查主体是否存在,但在执行pass命令后,它仍然会运行代码。哎呀,在其他示例中,它应该是continue,而不是pass。修正了,现在有道理了。再次感谢您!