본문 바로가기
카테고리 없음

파이썬 TypeError: object of type 'function' has no len() 해결법

by vibespace 2025. 4. 17.

TypeError: object of type 'function' has no len() 오류란?

파이썬에서 다음과 같은 오류 메시지를 본 적이 있으신가요?


TypeError: object of type 'function' has no len()

이 오류는 len() 함수에 함수 객체(function)를 전달했을 때 발생합니다. 즉, 리스트, 문자열, 딕셔너리처럼 길이를 측정할 수 없는 대상에 len()을 호출

대표적인 오류 상황 예제


def get_data():
    return [1, 2, 3]

print(len(get_data))  # 오류 발생

이 코드는 get_data라는 함수를 호출하지 않고 len()에 전달len(function)이 되어 오류가 발생합니다.

왜 이런 오류가 발생할까?

파이썬에서 함수 자체는 길이를 갖는 객체가 아니며, iterable도 아닙니다.
따라서 len(함수) 형태로 사용하면 다음과 같은 TypeError가 발생합니다.


TypeError: object of type 'function' has no len()

의도한 것은 아마도 함수의 결과물에 대해 길이를 구하려는 것이었을 겁니다. 위의 예제에서 올바른 코드는 다음과 같습니다:


print(len(get_data()))  # 3

해결법 1: 함수 호출 여부 확인하기

이 오류를 해결하는 가장 일반적인 방법은 함수를 호출했는지 확인()를 붙였는지 체크하세요.


# 잘못된 예
len(my_function)  # ❌ 함수 객체 자체

# 올바른 예
len(my_function())  # ✅ 함수 결과의 길이

중요 포인트: 함수 뒤에 ()가 빠지면 그건 함수 '정의'를 가리키는 참조일 뿐입니다.

해결법 2: 변수명이 함수와 겹치지 않도록 주의하기

아래와 같은 상황에서도 같은 오류가 발생할 수 있습니다.


len = lambda x: x + 1  # len 함수를 덮어씀

my_list = [1, 2, 3]
print(len(my_list))  # TypeError 발생

여기서는 내장 함수 len()을 사용자가 재정의len은 더 이상 내장 함수가 아닌 사용자의 함수 객체

해결법: 내장 함수 이름은 변수명으로 사용하지 마세요. 실수로 재정의했다면 del len으로 복구할 수 있습니다.


del len  # 내장 len 함수 복구

실제 디버깅 팁

다음과 같은 방법으로 오류 원인을 빠르게 찾을 수 있습니다:

  • type() 함수를 사용해 어떤 객체인지 확인
  • len()을 호출할 때 함수 괄호 누락 여부 점검
  • 내장 함수 이름을 덮어쓰지 않았는지 확인

print(type(get_data))    # 
print(type(get_data()))  # 

보너스: 조건문에서 자주 발생하는 유사한 오류

함수를 조건문에서 사용할 때도 동일한 실수가 발생할 수 있습니다:


def get_names():
    return []

if len(get_names) == 0:  # 오류 발생
    print("빈 리스트입니다.")

해결법: 함수를 호출한 결과에 대해 len()을 사용하세요.


if len(get_names()) == 0:
    print("빈 리스트입니다.")

정리: 괄호 하나가 오류를 만든다

TypeError: object of type 'function' has no len() 오류는 대부분 함수를 호출하지 않고 len()에 전달했을 때 발생합니다.

이 오류는 단순해 보이지만, 디버깅에 꽤 시간을 잡아먹을 수 있습니다. 아래 팁을 기억하세요:

  • len() 함수의 대상은 리스트, 문자열, 딕셔너리와 같은 시퀀스여야 합니다
  • len(함수) → ❌, len(함수()) → ✅
  • 내장 함수명을 변수명으로 쓰지 말 것

파이썬에서는 함수 자체는 길이를 갖지 않습니다. 항상 괄호를 통해 결과를 호출한 다음, 그 결과에 대해 len을 사용하세요.