본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 028. TypeError - function() takes 2 positional arguments but 3 were given

by about_IT 2025. 5. 27.
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