Eu li os outros tópicos relacionados a esse erro e parece que meu problema tem uma diferença distinta interessante do que todas as postagens que li até agora, ou seja, todas as outras postagens até agora têm o erro em relação a um usuário criado classe ou um recurso interno do sistema. Estou enfrentando esse problema ao chamar uma função, não consigo descobrir para que serve. Alguma ideia?
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)
Mensagem de erro:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
python
python-3.x
helicóptero desenhar lion4
fonte
fonte
Horizontol_drawbox
função? Se começarfillBox
, então essa é a falha (atribuída uma vez com argumento posicional e uma segunda vez com argumento de palavra-chave).Respostas:
Isso acontece quando é especificado um argumento de palavra-chave que substitui um argumento posicional. Por exemplo, vamos imaginar uma função que desenha uma caixa colorida. A função seleciona a cor a ser usada e delega o desenho da caixa para outra função, retransmitindo todos os argumentos extras.
Então a ligação
falhará porque dois valores foram atribuídos a
color
:"blellow"
como posicional e"green"
como palavra-chave. (painter.draw_box
deve aceitar os argumentosheight
ewidth
).Isso é fácil de ver no exemplo, mas é claro que se alguém misturar os argumentos de chamada, pode não ser fácil depurar:
Aqui,
color
é atribuído20
, em seguida,args=[30]
ecolor
é novamente atribuído"green"
.fonte
color
discussão. O problema era um pouco diferente - meumodel_matrix
argumento tornou-se apenas palavra-chave e algum código legado passou como argumento posicional. A nova API estava esperandocolor
e, em vez disso, obteve uma matriz 4x4.When a keyword argument is specified that overwrites a positional argument
. Mas por que o último pode funcionar? Qual é a regra quando python atribui os argumentos. Obrigado.Eu tive o mesmo problema que é realmente fácil de resolver, mas demorei um pouco para entender.
Eu havia copiado a declaração para onde a estava usando e deixado o argumento do 'eu' lá, mas levei anos para perceber isso.
eu tinha
mas deveria ter sido
fonte
self
pelo nome da classe. ;)Isso também acontece se você esquecer a
self
declaração dentro dos métodos de classe.Exemplo:
Não é assim que se chama
self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
:TRABALHOS :
fonte
self
argumento dentro da declaração da função. ou seja, o que deveria serdef myFunction(self, a, b, c='123')
escrito comodef myFunction(a, b, c='123')
. E porqueb
pega uma lista ec
pega um escalar, quando faltando a si mesmo, os argumentos estragam e, eventualmente, a entrada deb
vai parac
, causando o erro de "múltiplos argumentos". Eu cometi esse erro porque testei esse método interno fora da classe e esqueci de adicioná-loself
novamente. Espero que seja útil para outra pessoa!@staticmethod
qual pode ser uma abordagem melhor quandoself
não é inerentemente necessária.Meu problema era semelhante ao Q10, mas, no meu caso, havia me esquecido de fornecer o argumento próprio para uma função de classe:
Deve se tornar
É difícil ver esta implementação defeituosa ao chamar o método de classe como:
O que produzirá a
TypeError: got multiple values for argument
. Felizmente, o restante das respostas aqui são claras o suficiente para que alguém possa entender e corrigir rapidamente o erro. Caso contrário, espero que esta resposta o ajude!fonte
Simplificando, você não pode fazer o seguinte:
Porque você passa a variável 'y' para a função duas vezes: uma vez como kwargs e outra como declaração de função.
fonte
Fui trazido aqui por um motivo não mencionado explicitamente nas respostas até o momento, para salvar os outros do problema:
O erro também ocorre se os argumentos da função mudaram de ordem - pelo mesmo motivo da resposta aceita: os argumentos posicionais colidem com os argumentos da palavra-chave.
No meu caso, foi porque a ordem dos argumentos da
set_axis
função Pandas mudou entre 0,20 e 0,22:O uso dos exemplos comumente encontrados para set_axis resulta nesse erro confuso, desde quando você chama:
anterior a 0,22,
['a', 'b', 'c']
é atribuído ao eixo porque é o primeiro argumento e, em seguida, o argumento posicional fornece "valores múltiplos".fonte