我不明白这个Python TypeError

时间:2016-04-19 19:34:27

标签: python linode

我正在尝试使用Linode API以及此linode-python SDK来管理我的Linode服务器。但是,当我运行linode-disk-list()命令时,我得到一个我不理解的TypeError。

这就是linode-python API如何定义我正在调用的方法。如您所见,需要LinodeID。

@__api_request(required=['LinodeID'],
                 returns=[{u'CREATE_DT': u'YYYY-MM-DD hh:mm:ss.0',
                           u'DISKID': 'Disk ID',
                           u'ISREADONLY': '0 or 1',
                           u'LABEL': 'Disk label',
                           u'LINODEID': 'Linode ID',
                           u'SIZE': 'Size of disk (MB)',
                           u'STATUS': 'Status flag',
                           u'TYPE': "in ['ext3', 'swap', 'raw']",
                           u'UPDATE_DT': u'YYYY-MM-DD hh:mm:ss.0'}])
  def linode_disk_list(self, request):
    """Lists all disk images associated with a Linode."""
    pass

我的代码根据SDK的说明创建了Linode Python API的实例,然后调用linode_disk_list方法:

from linode import api as linode_api

api = linode_api.Api(<my_api_key>)
linode_id = 1800300
disks = api.linode_disk_list(linode_id)

我的代码生成此错误:

TypeError: wrapper() takes exactly 1 argument (2 given)

我知道我正在正确创建api实例,因为我在调用磁盘列表方法之前使用它来成功调用linode_ip_list方法。

只是看看会发生什么,如果我不提供linode_id参数,我会收到此错误:

linode.api.MissingRequiredArgument: 'LinodeID'

如果我用linode ID调用该方法,错误说我给它两个参数。但如果我不给它任何论据,它说我错过了一个论点。此时,我不确定LinodeID应该是整数还是字符串,但在任何一种情况下我都会得到相同的错误。如何调用此方法以便我不会获得TypeError参数?

谢谢!

1 个答案:

答案 0 :(得分:2)

@__api_request装饰器为每个参数获取一个列表:

def __api_request(required=[], optional=[], returns=[]):
    """Decorator to define required and optional parameters"""
    for k in required:
      [...]

但是,你传递的是一个整数

linode_id = 1800300
disks = api.linode_disk_list(linode_id)

您收到有关参数数量的冲突错误消息,因为wrapper()方法需要任意数量的关键字参数

 def wrapper(self, **kw):