【问题标题】:Tweepy api: create_friendship() takes 1 positional argument but 2 were givenTweepy api:create_friendship() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2021-03-26 23:36:58
【问题描述】:

我有一些代码根据文档从 Tweepy API 调用函数:

api = tweepy.API(auth)
...
api.create_friendship(tweet.user.id)

或者我已经尝试过重载:

api.create_friendship(tweet.user.username)

两种实现都会产生错误:

create_friendship() takes 1 positional argument but 2 were given

做一些研究,可以通过将 self 的实例传递给函数来避免这个错误,如下所示:

@payload('user')
def create_friendship(self, **kwargs):
    """ :reference: https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create
    """
    return self.request(
        'POST', 'friendships/create', endpoint_parameters=(
            'screen_name', 'user_id', 'follow'
        ), **kwargs
    )

但是,我只是在运行一个不属于类的简单脚本,因此我没有任何与 self 相关的范围。有没有简单的方法解决这个问题?

使用 python 3.9

【问题讨论】:

  • 你正在调用api.create_friendship,这意味着它实际上是一个类的一部分。 payload 装饰器是否会自动将函数插入到其他地方的类中?如果包含self 参数,它是否有效?您可能正在尝试解决您没有遇到的问题。
  • self 在这种情况下不是您从脚本中传递的参数,它是一种语法糖,主要用于管理继承。 Relevant SO answer
  • 你能分享一下tweet.user.usernametweet.user.id导致这个错误抛出的内容吗?

标签: python python-3.x tweepy


【解决方案1】:

签名和文档注释应该已经提示您:

def create_friendship(self, **kwargs):
    """ :reference: https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create
    """

由此,您应该能够推断出create_friendship 方法采用一个(隐式)位置参数(API 类的实例)和一些关键字参数。我假设预期的关键字参数是screen_name=user_id=follow=,如documentation page whose link appears in the doc comment 所述。

这意味着函数应该被调用为

api.create_friendship(user_id=tweet.user.id)

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2016-10-13
    • 2019-04-20
    • 2018-11-15
    • 2014-07-19
    • 2016-08-09
    • 2020-01-30
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多