【问题标题】:Flickrapi giving a TypeError: __init__() takes at least 3 arguments (3 given)Flickrapi 给出 TypeError: __init__() 至少需要 3 个参数(给定 3 个)
【发布时间】:2015-08-12 03:33:40
【问题描述】:

我将返回并完成从介绍到 comp sci 课程的旧课程,并且在其中一个实验室中,我应该使用 flickrapi 模块来抓取 flickr 以获取一组图片以用于其余的实验室。该项目分配了一些代码来抓取我知道应该可以工作的 flickr,但是每当我运行代码时,它都会引发 TypeError。返回错误的函数是:

def getphotos(apicode, query, num_images):
''' Return a list of URLs that have a tag that 
    matches the query code. '''
# Form the object that will interact with the Flickr website
flickr = flickrapi.FlickrAPI(apicode,  format='etree')

# Get each matching photo and store in a list, stopping when we
# reach the target number of images
photos = []
for photo in flickr.walk(tags = query, tag_mode = 'all', safe_search = '0', sort = 'interestingness-desc'):
    url = "http://farm" + photo.get('farm') + ".staticflickr.com/" + \
        photo.get('server') + "/" + photo.get('id') + "_" + \
        photo.get('secret') + ".jpg"
    print url
    photos.append(url)
    if len(photos) >= num_images:
        break

return photos

引发错误的行是 flickr = flickrapi.FlickrAPI(apicode, format='etree'),其中 apicode 表示 flickr 给我的 apicode 密钥,我不太确定 format ='etree' 的作用。当我查看 flickrapi 模块并进入 core.py 时,我进入了 FlickrAPI 类。课程中似乎感兴趣的部分如下所示:

class FlickrAPI(object):
"""Encapsulates Flickr functionality.

Example usage::

  flickr = flickrapi.FlickrAPI(api_key)
  photos = flickr.photos_search(user_id='73509078@N00', per_page='10')
  sets = flickr.photosets_getList(user_id='73509078@N00')
"""

REST_URL = 'https://api.flickr.com/services/rest/'
UPLOAD_URL = 'https://up.flickr.com/services/upload/'
REPLACE_URL = 'https://up.flickr.com/services/replace/'

def __init__(self, api_key, secret, username=None,
        token=None, format='etree', store_token=True,
        cache=False):
...(followed by logic statements involving the inputs for __init__ and class methods)

当 flickr 给我一个 apicode 密钥时,它也给了我一个密钥,我将它存储在一个 .txt 文件中,该文件与我正在处理的程序位于同一目录中。

现在显然对 FlickrAPI 类的调用传递了 3 个参数,其中 2 个是 apicode 键和格式 ='etree',但我有点不确定第三个是什么。该类是通过 flickr 以某种方式调用密钥,还是 init 的其他输入之一?如何修复代码给我的类型错误?

【问题讨论】:

    标签: class python-2.7 typeerror flickr


    【解决方案1】:

    三个必需的参数是selfapi_keysecret(没有默认值的参数),FlickrAPI 的文档字符串中给出的示例不起作用。

    这里,第一个参数 self 是隐式的(它是自己构建的 FlickrAPI 的实例),您将给第二个参数 api_keyapicode,但第三个必需参数 @ 987654327@,不见了。 format 是您提供的第三个参数,但它不计入三个必需参数,因为它有一个默认值。

    【讨论】:

    • 谢谢。问题已解决。
    【解决方案2】:

    问题是你没有为secret传递任何东西。

    看看这个例子

    class Test():
        def __init__(self, one, two, three=3):
            print one, two, three
    
    Test(1, three=3)
    

    Test.__init__ 接受四个参数,其中一个 (three) 具有默认值,因此它至少需要将selfonetwo 传递给它。 self 是自动传递的,因为它是一个类方法,所以这是第一个。然后你为one 传递一些东西,为three 传递一些东西。您确实传递了三个参数,这是最小值,但您没有为 two 传递任何参数,它没有任何默认值。这就是错误的来源。您可以调用具有相同数量参数的Test(1, 2),因为这样会提供所有没有默认值的参数。

    在您的代码中,您传递了 api_key 的参数和 format 的参数,但没有传递 secret 的任何参数,它没有默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2023-03-23
      相关资源
      最近更新 更多