Python: TypeError: аргумент типа «Комментарий» не повторяется

Я пытаюсь закодировать простого бота Reddit, который попадет в сабреддит, попадет в представление, прочитает комментарии, и если комментарий говорит «ощущения», он опубликует чувство GIF. Я получаю эту ошибку: «TypeError: аргумент типа «Комментарий» не является итерируемым» при попытке сделать has_feels = «feels» в комментарии.

Мой код:

import praw
import time

r = praw.Reddit('Posts Feels gif in response to someone saying feels'
                'by: Mjone77')
r.login('Feels_Bot', 'notrealpassword')
already_done = []

feels = ['feels']
while True:
    subreddit = r.get_subreddit('bottest')
    for submission in subreddit.get_new(limit=10):
        #submission = next(submissions)
        commentNum = 0
        for comment in submission.comments:
            print(comment)
            print(comment.id)
            has_feels = 'feels' in comment
            if comment.id not in already_done and has_feels:
                #comment.reply('[Relevant](http://i.imgur.com/pXBrf.gif)')
                already_done.append(comment.id)
                print('Commented')
        time.sleep(1800)

Отчет об ошибке (первые две строки — это распечатка кода, пока он не сломается):

The feels are strong
ciafpqn
Traceback (most recent call last):
  File "C:\Users\Me\Desktop\My Programs\Feels Bot\Feels Bot\FeelsBot.py", line 18, in <module>
    has_feels = 'feels' in comment
TypeError: argument of type 'Comment' is not iterable
sys:1: ResourceWarning: unclosed <socket object at 0x0369D8E8>
C:\Python34\lib\importlib\_bootstrap.py:2150: ImportWarning: sys.meta_path is empty

Кто-нибудь знает, как это исправить, чтобы, если комментарий содержал «ощущения» где-то внутри, он установил для has_feels значение true?

Кроме того, как только он просматривает все комментарии в представлении, он просто останавливается и не переходит к следующему представлению. Кто-нибудь знает, как это исправить? Если вы не знаете сразу, не утруждайте себя поиском чего-либо для меня, я могу найти эту часть.


person user3750888    schedule 18.06.2014    source источник


Ответы (1)


has_feels = 'feels' in comment

comment здесь выглядит как объект с атрибутами, которые по своей сути не являются итерируемыми, как list или string.

Из praw документации вам нужно получить доступ к тексту комментария через body атрибут:

Итак, что-то вроде:

has_feels = 'feels' in comment.body

Вот несколько примеров того, почему то, что вы сейчас делаете, не работает:

>>> "x" in "xxyy"  # works (string is iterable)
>>> "x" in ["x", "y"]  # works (list is iterable)

>>> class MyClass(): pass
>>> c = MyClass()
>>> "y" in c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'instance' is not iterable
person Martin Konecny    schedule 18.06.2014
comment
Большое спасибо, это сработало! Также спасибо, что показали мне документацию praw, я даже не подумал ее искать (я такой тупой). В любом случае, благодарю Вас! - person user3750888; 18.06.2014