新版Tweepy调用Stream报TypeError: Stream() takes no arguments如何解决?
报错触发原因
- 自定义类命名冲突且构造方法不符合规则:你自行定义了名为
Stream的类,该类未声明可接收参数的__init__构造方法,你编写的super__init__不是Python识别的默认构造函数,类默认生成的无参构造不接受任何传入参数,因此实例化Stream(auth, listener)时直接触发类型错误。 - Tweepy版本接口变更:你使用的v4.0及以上版本Tweepy已重构流API逻辑,旧v3.x版本中
tweepy.Stream(auth, listener)的传参方式已废弃,新版不需要单独声明listener实例、单独传入auth对象,直接继承tweepy.Stream时传入密钥参数即可实现流监听。
修复方案
删除冗余的自定义Stream类,按照新版Tweepy流API规则调整代码即可,修复后的完整代码如下:
import tweepy import keys class MaxListener(tweepy.Stream): def on_data(self, raw_data): self.process_data(raw_data) return True def process_data(self, raw_data): print(raw_data) def on_error(self, status_code): if status_code == 420: # 返回False即可断开流连接 return False if __name__ == "__main__": # 直接实例化自定义的流监听类,传入四个密钥参数 stream = MaxListener( consumer_key=keys.API_KEY, consumer_secret=keys.API_SECRET_KEY, access_token=keys.ACCESS_TOKEN, access_token_secret=keys.ACCES_TOKEN_SECRET ) # 启动关键词过滤采集 stream.filter(track=['Python'])
补充提示:注意检查keys文件中访问令牌密钥的变量名,避免拼写错误导致认证失败。如果需要兼容旧版代码逻辑,可执行pip install tweepy==3.10.0降级Tweepy版本,无需修改原有代码。
内容的提问来源于stack exchange,提问作者Dawid Fleszewski
相关产品推荐
相关产品推荐

