Ошибка типа: __init __ () принимает как минимум 4 аргумента без ключевых слов (3 дано) - PullRequest
1 голос
/ 01 августа 2011

Совет, пожалуйста:)

Когда я использую этот скрипт:

class CustomStreamListener(tweepy.StreamListener):

    def on_status(self, status):

        # We'll simply print some values in a tab-delimited format
        # suitable for capturing to a flat file but you could opt 
        # store them elsewhere, retweet select statuses, etc.



        try:
            print "%s\t%s\t%s\t%s" % (status.text, 
                                      status.author.screen_name, 
                                      status.created_at, 
                                      status.source,)
        except Exception, e:
            print >> sys.stderr, 'Encountered Exception:', e
            pass

    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream

# Create a streaming API and set a timeout value of 60 seconds.

streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)

# Optionally filter the statuses you want to track by providing a list
# of users to "follow".

print >> sys.stderr, 'Filtering the public timeline for "%s"' % (' '.join(sys.argv[1:]),)

streaming_api.filter(follow=None, track=Q)

Произошла ошибка, подобная этой:

Traceback (most recent call last):
  File "C:/Python26/test.py", line 65, in <module>
    streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)
TypeError: __init__() takes at least 4 non-keyword arguments (3 given)

Что мне делать тогда?

Ответы [ 3 ]

4 голосов
/ 01 августа 2011

Ваш пример выглядит как здесь . И вы используете Tweepy , библиотеку Python для доступа к API Twitter.

Из Github, здесь - это определение Stream() объекта (при условии, что у вас установлена ​​последняя версия Tweepy, пожалуйста, проверьте еще раз!),

def __init__(self, auth, listener, **options):
        self.auth = auth
        self.listener = listener
        self.running = False
        self.timeout = options.get("timeout", 300.0)
        self.retry_count = options.get("retry_count")
        self.retry_time = options.get("retry_time", 10.0)
        self.snooze_time = options.get("snooze_time",  5.0)
        self.buffer_size = options.get("buffer_size",  1500)
        if options.get("secure"):
            self.scheme = "https"
        else:
            self.scheme = "http"

        self.api = API()
        self.headers = options.get("headers") or {}
        self.parameters = None
        self.body = None

Поскольку вы, похоже, передали соответствующее количество аргументов, похоже, что CustomStreamListener() не инициализируется и, следовательно, не передается классу Stream() в качестве аргумента. Посмотрите, можете ли вы инициализировать CustomStreamListener() перед передачей в качестве аргумента Stream().

1 голос
/ 01 августа 2011

__init__ является конструктором класса, в данном случае Stream. Ошибка означает, что вы указали неверное количество аргументов для вызова конструктора.

0 голосов
/ 12 марта 2014

Основная причина этой проблемы - использование более старой версии tweepy. Я использовал tweepy 1.7.1 и имел ту же ошибку, прежде чем я обновил tweepy 1.8. Сразу после этого проблема была решена. Я думаю, что ответ с 4 голосами должен быть принят, чтобы уточнить решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...