728x90
TypeError: function() takes 2 positional arguments but 3 were given
오류는 함수가 받을 수 있는 인자의 수보다 더 많은 인자를 전달했을 때 발생합니다. 함수는 정의된 인자 개수에 맞게 호출되어야 하며, 초과되는 인자가 전달되면 파이썬 인터프리터는 이를 허용하지 않고 TypeError
를 발생시킵니다.
이 오류는 특히 함수의 정의를 변경했거나, 인자 수를 혼동했거나, 클래스 메서드에서 self
를 잊고 선언했을 때도 자주 발생합니다. 인자 전달 방식에 대한 정확한 이해가 필요합니다.
● 오류 발생 예시
def greet(name, message):
print(name, message)
greet("Alice", "Hello", "!!")
위 함수는 두 개의 인자만 받도록 정의되었지만, 호출 시 세 개의 인자가 전달되어 오류가 발생합니다.
TypeError: greet() takes 2 positional arguments but 3 were given
● 올바른 코드 예시
greet("Alice", "Hello")
정의된 인자 수에 맞게 호출하면 문제없이 실행됩니다.
● 유연한 인자 처리 방법
def greet(name, *args):
print(name, *args)
*args
를 사용하면 가변 개수의 인자를 받을 수 있어 호출 시 유연하게 대응할 수 있습니다.
● 자주 하는 실수
- 인자 수를 혼동하고 과도하게 전달
- 기존 함수에 인자를 추가했지만 호출 코드를 수정하지 않음
- 클래스 메서드 정의 시
self
를 생략하여 인자 수 계산 오류 발생
● 디버깅 팁
- 오류 메시지에 나온 함수가 실제 몇 개의 인자를 받는지
help(함수)
로 확인 - 함수 정의와 호출 부분의 인자 개수를 맞추는지 점검
- 가변 인자를 활용할 필요가 있는지 검토
● 결론
TypeError - takes N positional arguments but M were given
오류는 함수 호출 시 인자의 개수가 맞지 않아 발생하는 기본적인 오류입니다. 함수 정의를 정확히 파악하고, 호출 시 전달하는 인자의 개수를 맞추는 것이 중요합니다. 필요 시 *args
, **kwargs
를 활용하면 유연한 인자 처리가 가능합니다.
728x90