cho*_*on4 102 python python-3.x
我阅读了与此错误有关的其他线程,似乎我的问题与我到目前为止所读的所有帖子都有一个有趣的明显区别,即到目前为止所有其他帖子都有关于用户创建的错误类或内置系统资源.我在调用函数时遇到这个问题,我无法弄清楚它可能是什么.有任何想法吗?
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)
Run Code Online (Sandbox Code Playgroud)
错误信息:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
Run Code Online (Sandbox Code Playgroud)
Cil*_*yan 172
当指定覆盖位置参数的关键字参数时,会发生这种情况.例如,让我们想象一个绘制彩色框的功能.该函数选择要使用的颜色,并将框的绘图委托给另一个函数,转发所有额外的参数.
def color_box(color, *args, **kwargs):
painter.select_color(color)
painter.draw_box(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
然后是电话
color_box("blellow", color="green", height=20, width=30)
Run Code Online (Sandbox Code Playgroud)
将失败,因为两个值分配给color:"blellow"作为位置和"green"关键字.(painter.draw_box应该接受height和width论证).
这在示例中很容易看到,但是当然如果在调用时混淆了参数,则调试可能并不容易:
# misplaced height and width
color_box(20, 30, color="green")
Run Code Online (Sandbox Code Playgroud)
这里,color被分配20,然后args=[30]和color再次分配"green".
Q--*_*ten 51
我有同样的问题很容易制作,但我花了一段时间才能看透.
我把声明复制到我使用它的地方,并在那里留下了"自我"的论点,但我花了很多时间才意识到这一点.
我有
self.myFunction(self, a, b, c='123')
Run Code Online (Sandbox Code Playgroud)
但应该是
self.myFunction(a, b, c='123')
Run Code Online (Sandbox Code Playgroud)
gie*_*s0r 36
如果您忘记了self类方法中的声明,也会发生这种情况
例:
class Example():
def is_overlapping(x1, x2, y1, y2):
# Thanks to https://stackoverflow.com/a/12888920/940592
return max(x1, y1) <= min(x2, y2)
Run Code Online (Sandbox Code Playgroud)
失败称之为self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
:
{TypeError} is_overlapping()为参数'x1'获取了多个值
工作:
class Example():
def is_overlapping(self, x1, x2, y1, y2):
# Thanks to https://stackoverflow.com/a/12888920/940592
return max(x1, y1) <= min(x2, y2)
Run Code Online (Sandbox Code Playgroud)
And*_*löw 14
我的问题类似于Q --- ten,但在我的情况下,我忘记了为类函数提供self参数:
class A:
def fn(a, b, c=True):
pass
Run Code Online (Sandbox Code Playgroud)
应该成为
class A:
def fn(self, a, b, c=True):
pass
Run Code Online (Sandbox Code Playgroud)
调用类方法时很难看到这个错误的实现:
a_obj = A()
a.fn(a_val, b_val, c=False)
Run Code Online (Sandbox Code Playgroud)
哪个会产生一个TypeError: got multiple values for argument.希望这里的其余答案足够清楚,任何人都能够快速理解并修复错误.如果没有,希望这个答案可以帮到你!
简而言之,您不能执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
因为您将变量 'y' 传递到函数中两次:一次作为 kwargs,一次作为函数声明。
我被带到这里的原因到目前为止在答案中没有明确提到,所以为了省去其他人的麻烦:
如果函数参数更改了顺序,也会发生错误 - 原因与接受的答案相同:位置参数与关键字参数冲突。
就我而言,这是因为 Pandasset_axis函数的参数顺序在 0.20 和 0.22 之间变化:
0.20: DataFrame.set_axis(axis, labels)
0.22: DataFrame.set_axis(labels, axis=0, inplace=None)
Run Code Online (Sandbox Code Playgroud)
使用 set_axis 的常见示例会导致此令人困惑的错误,因为当您调用:
df.set_axis(['a', 'b', 'c'], axis=1)
Run Code Online (Sandbox Code Playgroud)
在 0.22 之前,['a', 'b', 'c']被分配给 axis 因为它是第一个参数,然后位置参数提供“多个值”。
此异常也将得到提升每当一个函数被调用用的组合keyword arguments和args,kwargs
例子:
def function(a, b, c, *args, **kwargs):
print(f"a: {a}, b: {b}, c: {c}, args: {args}, kwargs: {kwargs}")
function(a=1, b=2, c=3, *(4,))
Run Code Online (Sandbox Code Playgroud)
它会提高:
TypeError Traceback (most recent call last)
<ipython-input-4-1dcb84605fe5> in <module>
----> 1 function(a=1, b=2, c=3, *(4,))
TypeError: function() got multiple values for argument 'a'
Run Code Online (Sandbox Code Playgroud)
而且,每当您在继承中滥用它时,它都会变得更加复杂。所以要小心我们这些东西!
1- 使用keyword arguments和调用函数args:
class A:
def __init__(self, a, b, *args, **kwargs):
self.a = a
self.b = b
class B(A):
def __init__(self, *args, **kwargs):
a = 1
b = 2
super(B, self).__init__(a=a, b=b, *args, **kwargs)
B(3, c=2)
Run Code Online (Sandbox Code Playgroud)
例外:
TypeError Traceback (most recent call last)
<ipython-input-5-17e0c66a5a95> in <module>
11 super(B, self).__init__(a=a, b=b, *args, **kwargs)
12
---> 13 B(3, c=2)
<ipython-input-5-17e0c66a5a95> in __init__(self, *args, **kwargs)
9 a = 1
10 b = 2
---> 11 super(B, self).__init__(a=a, b=b, *args, **kwargs)
12
13 B(3, c=2)
TypeError: __init__() got multiple values for argument 'a'
Run Code Online (Sandbox Code Playgroud)
2 -与调用一个函数keyword arguments和kwargs它所包含的关键字参数太多:
class A:
def __init__(self, a, b, *args, **kwargs):
self.a = a
self.b = b
class B(A):
def __init__(self, *args, **kwargs):
a = 1
b = 2
super(B, self).__init__(a=a, b=b, *args, **kwargs)
B(**{'a': 2})
Run Code Online (Sandbox Code Playgroud)
例外:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-c465f5581810> in <module>
11 super(B, self).__init__(a=a, b=b, *args, **kwargs)
12
---> 13 B(**{'a': 2})
<ipython-input-7-c465f5581810> in __init__(self, *args, **kwargs)
9 a = 1
10 b = 2
---> 11 super(B, self).__init__(a=a, b=b, *args, **kwargs)
12
13 B(**{'a': 2})
TypeError: __init__() got multiple values for keyword argument 'a'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161631 次 |
| 最近记录: |