Leí los otros hilos que tenían que ver con este error y parece que mi problema tiene una diferencia distinta interesante que todas las publicaciones que he leído hasta ahora, es decir, todas las otras publicaciones hasta ahora tienen el error con respecto a un usuario creado clase o un recurso del sistema integrado. Estoy experimentando este problema al llamar a una función, no puedo entender para qué podría ser. ¿Algunas ideas?
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)
Mensaje de error:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
python
python-3.x
chopper draw lion4
fuente
fuente
Horizontol_drawbox
función? Si comienza confillBox
, entonces ese es el error (asignado una vez con argumento posicional y una segunda vez con argumento de palabra clave).Respuestas:
Esto sucede cuando se especifica un argumento de palabra clave que sobrescribe un argumento posicional. Por ejemplo, imaginemos una función que dibuja un cuadro de color. La función selecciona el color que se utilizará y delega el dibujo del cuadro a otra función, retransmitiendo todos los argumentos adicionales.
Entonces la llamada
fallará porque se asignan dos valores a
color
:"blellow"
como posicional y"green"
como palabra clave. (painter.draw_box
se supone que acepta los argumentosheight
ywidth
).Esto es fácil de ver en el ejemplo, pero, por supuesto, si uno mezcla los argumentos en la llamada, puede que no sea fácil de depurar:
Aquí,
color
se le asigna20
, luegoargs=[30]
ycolor
nuevamente se le asigna"green"
.fuente
color
discusión. El problema era un poco diferente: mimodel_matrix
argumento se convirtió solo en palabras clave, y algunos códigos heredados lo pasaron como un argumento posicional. La nueva API esperabacolor
, y en su lugar obtuvo una matriz 4x4.When a keyword argument is specified that overwrites a positional argument
. ¿Pero por qué este último puede funcionar? ¿Cuál es la regla cuando python asigna los argumentos? Gracias.Tuve el mismo problema que es realmente fácil de resolver, pero me llevó un tiempo resolverlo.
Había copiado la declaración en el lugar donde la estaba usando y había dejado allí el argumento del "yo", pero me llevó años darme cuenta de eso.
yo tenía
pero debería haber sido
fuente
self
con el nombre de la clase. ;)Esto también sucede si olvida la
self
declaración dentro de los métodos de clase.Ejemplo:
No se puede llamar así
self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
con:OBRAS :
fuente
self
argumento dentro de la declaración de función. es decir, lo que debería estardef myFunction(self, a, b, c='123')
escrito comodef myFunction(a, b, c='123')
. Y debido a queb
toma una lista yc
toma un escalar, cuando se pierde uno mismo, los argumentos se equivocan y, finalmente, la entrada deb
va ac
, causando el error de "argumentos múltiples". Cometo este error porque probé este método interno fuera de la clase y olvido agregarloself
nuevamente. ¡Espero que sea útil para alguien más!@staticmethod
que puede ser un mejor enfoque cuandoself
no se requiere inherentemente.Mi problema era similar a Q --- ten, pero en mi caso fue que me había olvidado de proporcionar el argumento propio a una función de clase:
Debe convertirse
Esta implementación defectuosa es difícil de ver cuando se llama al método de clase como:
Lo que rendirá a
TypeError: got multiple values for argument
. Con suerte, el resto de las respuestas aquí son lo suficientemente claras como para que cualquiera pueda comprender y corregir el error rápidamente. Si no, ¡espero que esta respuesta te ayude!fuente
En pocas palabras, no puede hacer lo siguiente:
Porque pasa la variable 'y' en la función dos veces: una vez como kwargs y otra como declaración de función.
fuente
Me trajeron aquí por una razón no mencionada explícitamente en las respuestas hasta ahora, así que para salvar a otros el problema:
El error también ocurre si los argumentos de la función han cambiado de orden, por la misma razón que en la respuesta aceptada: los argumentos posicionales chocan con los argumentos de las palabras clave.
En mi caso fue porque el orden de los argumentos de la
set_axis
función Pandas cambió entre 0,20 y 0,22:El uso de los ejemplos comúnmente encontrados para set_axis da como resultado este error confuso, ya que cuando llama:
anterior a 0.22,
['a', 'b', 'c']
se asigna al eje porque es el primer argumento, y luego el argumento posicional proporciona "valores múltiples".fuente