You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tweepy StreamingClient自定义__init__传bearer_token报错求助

问题原因

你的TweetStreamer子类__init__方法没有定义bearer_token参数,也未接收额外关键字参数,但创建实例时传入了该参数,导致Python报错;同时父类StreamingClient的__init__需要bearer_token作为必传参数,你当前调用super().__init__()时未传递该参数,即使没触发此错误,也会导致父类初始化失败。

解决方案

有两种修改方式,可根据需求选择:

方式1:显式声明bearer_token参数

直接在子类__init__中添加bearer_token参数,并传递给父类初始化方法:

import datetime
import tweepy

def check_path_exists(path):
    # 假设该函数已实现路径校验逻辑
    return path

class TweetStreamer(tweepy.StreamingClient):

    def __init__(self, 
                 bearer_token: str,
                 out_path: str,
                 kill_time: int = 59,
                 time_unit: str = 'minutes'):
        '''
        添加自定义参数
        '''
        out_path = check_path_exists(out_path)
        self.outfile = out_path 

        if time_unit not in ['seconds', 'minutes']:
            raise ValueError(f'time_unit must be either `minutes` or `seconds`.')

        if time_unit == 'minutes':
            self.kill_time = datetime.timedelta(seconds=60*kill_time)
        else:
            self.kill_time = datetime.timedelta(seconds=kill_time)

        # 将bearer_token传递给父类初始化
        super().__init__(bearer_token=bearer_token)

    def on_data(self, data):
        '''
        1. 清理返回的推文对象
        2. 写入文件
        '''
        with open(self.outfile, 'ab') as o:
            o.write(data + b'\n')

方式2:用**kwargs兼容父类所有参数

通过**kwargs接收所有额外关键字参数,包括bearer_token及父类的其他可选参数(如wait_on_rate_limit),扩展性更强:

import datetime
import tweepy

def check_path_exists(path):
    # 假设该函数已实现路径校验逻辑
    return path

class TweetStreamer(tweepy.StreamingClient):

    def __init__(self, 
                 out_path: str,
                 kill_time: int = 59,
                 time_unit: str = 'minutes',
                 **kwargs):
        '''
        添加自定义参数,兼容父类所有关键字参数
        '''
        out_path = check_path_exists(out_path)
        self.outfile = out_path 

        if time_unit not in ['seconds', 'minutes']:
            raise ValueError(f'time_unit must be either `minutes` or `seconds`.')

        if time_unit == 'minutes':
            self.kill_time = datetime.timedelta(seconds=60*kill_time)
        else:
            self.kill_time = datetime.timedelta(seconds=kill_time)

        # 将所有额外关键字参数传递给父类
        super().__init__(**kwargs)

    def on_data(self, data):
        '''
        1. 清理返回的推文对象
        2. 写入文件
        '''
        with open(self.outfile, 'ab') as o:
            o.write(data + b'\n')
调用方式

两种修改后的代码,都可以用你原来的方式创建实例:

streamer = TweetStreamer(bearer_token=bearer_token, out_path='test2.json')

内容的提问来源于stack exchange,提问作者nikUoM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:36:01