3 votes

Je ne comprends pas cette erreur de type Python.

J'essaie d'utiliser le API Linode avec ceci linode-python SDK pour gérer mes serveurs Linode. Cependant, j'obtiens un TypeError que je ne comprends pas lorsque j'exécute l'application linode-disk-list() comando.

C'est ainsi que l'API linode-python définit la méthode que j'appelle. Comme vous pouvez le voir, un LinodeID est requis.

@__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

Mon code crée une instance de l'API Linode Python selon les instructions du SDK et appelle ensuite la méthode 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)

Mon code génère cette erreur :

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

Je sais que je crée l'instance d'api correctement car je l'utilise pour appeler avec succès la méthode linode_ip_list avant d'appeler la méthode disk list.

Juste pour voir ce qui se passe, si je ne fournis pas l'argument linode_id, j'obtiens cette erreur :

linode.api.MissingRequiredArgument: 'LinodeID'

Si j'appelle la méthode avec un ID de linode, l'erreur dit que je lui donne deux arguments. Mais si je ne lui donne aucun argument, elle indique qu'il lui manque un argument. À ce stade, je ne sais pas si l'ID de nœud de ligne doit être un nombre entier ou une chaîne de caractères, mais j'obtiens la même erreur dans les deux cas. Comment puis-je appeler cette méthode pour ne pas obtenir l'argument TypeError ?

Gracias.

2voto

Darrick Herwehe Points 2125

El @__api_request prend une liste pour chacun de ses arguments :

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

Mais, vous passez dans un nombre entier

linode_id = 1800300
disks = api.linode_disk_list(linode_id)

Et vous obtenez des messages d'erreur contradictoires concernant le nombre de paramètres, car l'option wrapper() prend une quantité arbitraire d'arguments de mots-clés

 def wrapper(self, **kw):

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X