J'ai lu les autres discussions qui avaient à voir avec cette erreur et il semble que mon problème présente une différence distincte intéressante par rapport à tous les messages que j'ai lus jusqu'à présent, à savoir, tous les autres messages jusqu'à présent ont l'erreur en ce qui concerne soit un utilisateur créé classe ou une ressource système intégrée. Je rencontre ce problème lors de l'appel d'une fonction, je n'arrive pas à comprendre à quoi cela pourrait servir. Des idées?
BOX_LENGTH = 100
turtle.speed(0)
fill = 0
for i in range(8):
fill += 1
if fill % 2 == 0:
Horizontol_drawbox(BOX_LENGTH, fillBox = False)
else:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
for i in range(8):
fill += 1
if fill % 2 == 0:
Vertical_drawbox(BOX_LENGTH,fillBox = False)
else:
Vertical_drawbox(BOX_LENGTH,fillBox = True)
Message d'erreur:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
python
python-3.x
chopper dessiner lion4
la source
la source
Horizontol_drawbox
fonction? Si cela commence parfillBox
, alors c'est la faute (assignée une fois avec l'argument positionnel et une deuxième fois avec l'argument mot-clé).Réponses:
Cela se produit lorsqu'un argument de mot-clé est spécifié qui écrase un argument de position. Par exemple, imaginons une fonction qui dessine une boîte colorée. La fonction sélectionne la couleur à utiliser et délègue le dessin de la boîte à une autre fonction, en relayant tous les arguments supplémentaires.
Puis l'appel
échouera car deux valeurs sont attribuées à
color
:"blellow"
comme positionnel et"green"
comme mot-clé. (painter.draw_box
est censé accepter les argumentsheight
etwidth
).C'est facile à voir dans l'exemple, mais bien sûr, si l'on mélange les arguments à l'appel, il peut ne pas être facile de déboguer:
Ici,
color
est affecté20
, alorsargs=[30]
etcolor
est de nouveau attribué"green"
.la source
color
argument. Le problème était un peu différent - monmodel_matrix
argument est devenu un mot clé uniquement, et certains codes hérités l'ont fait passer comme argument de position. La nouvelle API attendaitcolor
et a obtenu une matrice 4x4 à la place.When a keyword argument is specified that overwrites a positional argument
. Mais pourquoi ce dernier peut-il fonctionner? Quelle est la règle lorsque python attribue les arguments. Je vous remercie.J'ai eu le même problème qui est vraiment facile à résoudre, mais il m'a fallu un certain temps pour le résoudre.
J'avais copié la déclaration là où je l'utilisais et j'avais laissé là l'argument du «moi», mais il m'a fallu des siècles pour m'en rendre compte.
j'ai eu
mais ça aurait dû être
la source
self
par le nom de la classe. ;)Cela se produit également si vous oubliez la
self
déclaration dans les méthodes de classe.Exemple:
Ne l' appelle pas comme
self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
avec:TRAVAUX :
la source
self
argument à l'intérieur de la déclaration de fonction. c'est-à-dire que ce qui devrait êtredef myFunction(self, a, b, c='123')
était écrit commedef myFunction(a, b, c='123')
. Et parce queb
prend une liste etc
prend un scalaire, quand il manque self, les arguments sont foirés et finalement l'entrée deb
va àc
, provoquant l'erreur "arguments multiples". Je fais cette erreur parce que j'ai testé cette méthode interne en dehors de la classe et j'ai oublié d'ajouter leself
back in. J'espère utile pour quelqu'un d'autre!@staticmethod
qui peut être une meilleure approche lorsqu'elleself
n'est pas intrinsèquement requise.Mon problème était similaire à celui de Q --- dix, mais dans mon cas, c'était que j'avais oublié de fournir l'argument self à une fonction de classe:
Devrait devenir
Cette implémentation défectueuse est difficile à voir lors de l'appel de la méthode de classe comme suit:
Ce qui donnera un
TypeError: got multiple values for argument
. Espérons que le reste des réponses ici soit suffisamment clair pour que quiconque puisse comprendre et corriger rapidement l'erreur. Sinon, espérons que cette réponse vous aidera!la source
En termes simples, vous ne pouvez pas effectuer les opérations suivantes:
Parce que vous passez la variable «y» dans la fonction deux fois: une fois comme kwargs et une fois comme déclaration de fonction.
la source
J'ai été amené ici pour une raison qui n'a pas été explicitement mentionnée dans les réponses jusqu'à présent, afin d'éviter aux autres le problème:
L'erreur se produit également si les arguments de la fonction ont changé d'ordre - pour la même raison que dans la réponse acceptée: les arguments de position entrent en conflit avec les arguments de mot-clé.
Dans mon cas, c'était parce que l'ordre des arguments de la
set_axis
fonction Pandas a changé entre 0,20 et 0,22:L'utilisation des exemples couramment trouvés pour set_axis entraîne cette erreur déroutante, car lorsque vous appelez:
avant 0.22,
['a', 'b', 'c']
est assigné à l'axe car c'est le premier argument, puis l'argument positionnel fournit "plusieurs valeurs".la source