为什么我可以通过赋值绕过“函数只需1个参数(2个给定)”错误?

时间:2014-02-28 22:09:55

标签: python twitter twython

我正在尝试使用Twython在python中使用Twitter API,我观察到一些对我来说很奇怪的行为。

如果我运行以下代码......

from twython import Twython
from random import randint

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) # In the actual code, I obviously assign these, but I can't disclose them here, so the code won't work...

user_id = randint(1,250000000)
twitter_user = twitter.lookup_user(user_id)

我收到此错误。

Traceback (most recent call last):

File "Twitter_API_Extraction.py", line 76, in <module>
twitter_user = twitter.lookup_user(user_id) # returns a list of dictionaries with all the users requested
TypeError: lookup_user() takes exactly 1 argument (2 given)

Twython文档表明我只需要传递用户ID或屏幕名称(https://twython.readthedocs.org/en/latest/api.html)。一些谷歌搜索表明这个错误通常意味着我需要传递 self 作为第一个参数,但我不明白为什么。

但是,如果我使用以下作业......

twitter_user = twitter.lookup_user(user_id = randint(1,250000000))

一切都出现了玫瑰。我无法弄清楚为什么会这样,当我尝试使用相同的lookup_user函数访问关注者时,代码后面会出现问题。

有关触发此错误的内容以及我如何通过函数调用中的赋值绕过它的任何说明都将非常感激!

2 个答案:

答案 0 :(得分:3)

根据API documentation

lookup_user(**params)
  

返回完全水合的用户对象,每个请求最多100个用户,由逗号分隔值指定传递给user_id和/或screen_name参数。

**语法(documentation)表示您需要提供名为的参数(即f(a=b)),在本例中为user_id和/或screen_name

在您第一次尝试时,您尝试传递位置参数(即f(a)),但该函数未设置。

答案 1 :(得分:2)

API声明lookup_user仅接受关键字参数。关键字参数采用keyword=value形式,这就是您使用lookup_user(user_id=randint(1,...))进行的操作。这意味着您无法传递位置参数,这就是您使用lookup_user(userid)进行的操作。