이 오류와 관련된 다른 스레드를 읽었으며 지금까지 읽은 모든 게시물과는 다른 흥미로운 문제가 있습니다. 즉, 다른 모든 게시물에는 사용자가 만든 것과 관련하여 오류가 있습니다. 클래스 또는 내장 시스템 리소스 함수를 호출 할 때이 문제가 발생하여 그 기능이 무엇인지 알 수 없습니다. 어떤 아이디어?
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'
답변
위치 인수를 겹쳐 쓰는 키워드 인수가 지정된 경우에 발생합니다. 예를 들어, 컬러 박스를 그리는 함수를 상상해 봅시다. 이 함수는 사용할 색상을 선택하고 상자 그림을 다른 함수에 위임하여 모든 추가 인수를 릴레이합니다.
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"
키워드로. ( 및 인수 painter.draw_box
를 수락해야합니다 ).height
width
이것은 예제에서 쉽게 볼 수 있지만 물론 호출 할 때 인수를 혼합하면 디버그하기가 쉽지 않을 수 있습니다.
# misplaced height and width
color_box(20, 30, color="green")
여기서, color
할당 된 20
후, args=[30]
그리고 color
다시 지정됩니다 "green"
.
답변
나는 실제로 만들기 쉬운 문제가 있었지만 잠시 동안 시간을 보냈다.
나는 그 선언을 내가 사용한 곳으로 복사하고 거기에 ‘자기’논리를 남겼지 만 그것을 깨닫는 데 오랜 시간이 걸렸다.
나는했다
self.myFunction(self, a, b, c='123')
그러나 그것은
self.myFunction(a, b, c='123')
답변
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)
다음과 같이 호출하지 못했습니다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)
답변
내 문제는 Q–10과 비슷하지만 내 경우에는 클래스 함수에 자기 주장을 제공하는 것을 잊어 버렸습니다.
class A:
def fn(a, b, c=True):
pass
되어야한다
class A:
def fn(self, a, b, c=True):
pass
이 잘못된 구현은 클래스 메소드를 호출 할 때 다음과 같이보기 어렵습니다.
a_obj = A()
a.fn(a_val, b_val, c=False)
어느 것이 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
변수 ‘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']
에는 첫 번째 인수이므로 축에 할당 된 다음 위치 인수는 “다중 값”을 제공합니다.