我阅读了与此错误有关的其他线程,似乎我的问题与我迄今为止阅读的所有帖子有一个有趣的明显区别,即,迄今为止所有其他帖子都有关于用户创建的类或内置系统资源的错误。我在调用函数时遇到了这个问题,我不知道它是用来做什么的。什么好主意吗?

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)

错误信息:

    Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'

当前回答

我也遇到过同样的问题,这真的很容易,但我花了一些时间才看透。

我把声明复制到我使用它的地方,并把self参数留在那里,但我花了很长时间才意识到这一点。

我有

self.my_method(self, a, b, c='123')

但它本该如此

self.my_method(a, b, c='123')

其他回答

我得到了相同的错误,因为我使用@classmethod。

如果有人在类中使用@classmethod时得到这个错误,不要忘记将cls参数传递给方法:

class X:
  @classmethod
  def my_method(x):
    pass

上面的代码将引发“TypeError: got multiple values for argument”错误,你应该像下面这样传递cls:

class X:
  @classmethod
  def my_method(cls, x):
    pass

我也遇到过同样的问题,这真的很容易,但我花了一些时间才看透。

我把声明复制到我使用它的地方,并把self参数留在那里,但我花了很长时间才意识到这一点。

我有

self.my_method(self, a, b, c='123')

但它本该如此

self.my_method(a, b, c='123')

当指定的关键字参数覆盖位置参数时,就会发生这种情况。例如,让我们想象一个绘制彩色方框的函数。该函数选择要使用的颜色,并将框的绘制委托给另一个函数,传递所有额外的参数。

def color_box(color, *args, **kwargs):
    painter.select_color(color)
    painter.draw_box(*args, **kwargs)

然后电话

color_box("blellow", color="green", height=20, width=30)

将失败,因为给color分配了两个值:“blellow”作为位置,“green”作为关键字。(画家。Draw_box应该接受height和width参数)。

这在示例中很容易看出,但当然,如果在调用时混淆了参数,则可能不容易调试:

# misplaced height and width
color_box(20, 30, color="green")

在这里,color被赋值为20,然后args=[30], color再次被赋值为“绿色”。

简单地说,你不能做以下事情:

class C(object):
    def x(self, y, **kwargs):
        # Which y to use, kwargs or declaration? 
        pass

c = C()
y = "Arbitrary value"
kwargs["y"] = "Arbitrary value"
c.x(y, **kwargs) # FAILS

因为您将变量“y”传递给函数两次:一次作为kwargs,一次作为函数声明。

到目前为止,我被带到这里的原因在答案中没有明确提到,所以为了避免其他人的麻烦:

如果函数参数改变了顺序,也会发生错误——原因与接受的答案相同:位置参数与关键字参数冲突。

在我的例子中,这是因为Pandas set_axis函数的参数顺序在0.20和0.22之间发生了变化:

0.20: DataFrame.set_axis(axis, labels)
0.22: DataFrame.set_axis(labels, axis=0, inplace=None)

使用常见的set_axis示例会导致这种令人困惑的错误,因为当您调用:

df.set_axis(['a', 'b', 'c'], axis=1)

在0.22之前,['a', 'b', 'c']被分配给axis,因为它是第一个参数,然后位置参数提供“多个值”。