我不明白这个 Python TypeError
I don't understand this Python TypeError
我正在尝试使用 Linode API along with this linode-python SDK to manage my Linode servers. However, I'm getting a TypeError I don't understand when I run the linode-disk-list() 命令。
这就是 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 参数?
谢谢!
@__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):
我正在尝试使用 Linode API along with this linode-python SDK to manage my Linode servers. However, I'm getting a TypeError I don't understand when I run the linode-disk-list() 命令。
这就是 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 参数?
谢谢!
@__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):