len()
메서드는 문자열, 목록 및 사전과 같은 반복 가능한 개체에서만 작동합니다. iterable 객체에는 값의 시퀀스가 포함되어 있기 때문입니다. len()
을 사용하려고 하면 None 값에 대한 메서드를 사용하면 "TypeError:'NoneType' 유형의 개체에 len()
이 없습니다. ".
이 가이드에서는 이 오류의 의미와 작동 방식에 대해 설명합니다. 코드에서 이 오류를 해결하는 방법을 알아낼 수 있도록 이 오류의 두 가지 예를 살펴보겠습니다.
TypeError:'NoneType' 유형의 개체에 len()이 없습니다.
NoneType은 None 데이터 유형을 나타냅니다. len()
과 같이 반복 가능한 객체에서 작동하는 메서드는 사용할 수 없습니다. , None 값에서. None에는 값 컬렉션이 포함되어 있지 않기 때문입니다. None에는 자식 값이 없기 때문에 None의 길이를 계산할 수 없습니다.
이 오류는 다음 두 가지 경우에 일반적입니다.
- 내장 함수가 목록을 제자리에서 변경한다는 사실을 잊어버린 경우
- 함수에서 return 문을 잊어버린 경우
각각의 원인에 대해 자세히 살펴보겠습니다.
원인 #1:내장 함수가 제자리에서 목록을 변경합니다.
우리는 학교의 학생에 대한 정보가 포함된 사전 목록을 정렬하는 프로그램을 만들 것입니다. 이 목록은 마지막 시험에서 학생의 성적이 오름차순으로 정렬됩니다.
시작하려면 학생과 가장 최근의 시험 점수에 대한 정보가 포함된 사전 목록을 정의하십시오.
students = [ {"name": "Peter", "score": 76 }, {"name": "Richard", "score": 63 }, {"name": "Erin", "score": 64 }, {"name": "Miley", "score": 89 } ]
각 사전에는 두 개의 키와 값이 있습니다. 하나는 학생의 이름에 해당하고 다른 하나는 학생이 마지막 시험에서 얻은 점수에 해당합니다. 다음으로 sort()
를 사용합니다. 학생 목록을 정렬하는 방법:
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
def score_sort(s): return s["score"] sorted_students = students.sort(key=score_sort)
각 사전에 "score" 값을 반환하는 "score_sort"라는 함수를 선언했습니다. 그런 다음 이를 사용하여 sort()
를 사용하여 사전 목록의 항목을 정렬합니다. 방법.
다음으로 목록의 길이를 인쇄합니다.
print("There are {} students in the list.".format(len(sorted_students)))
for 루프를 사용하여 콘솔에 새로운 사전 목록을 출력합니다:
for s in sorted_students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
이 코드는 "sorted_students" 목록에 있는 각 학생의 마지막 시험에서 학생이 얻은 점수를 알려주는 메시지를 출력합니다. 코드를 실행해 보겠습니다.
Traceback (most recent call last): File "main.py", line 13, in <module> print("There are {} students in the list.".format(len(sorted_students))) TypeError: object of type 'NoneType' has no len()
코드가 오류를 반환합니다.
이 문제를 해결하려면 sort()
의 결과를 할당하는 코드를 제거해야 합니다. 방법을 "sorted_students"로 지정합니다. sort()
메소드는 제자리에서 목록을 변경합니다. 새 목록을 만들지 않습니다.
"sorted_students" 목록의 선언을 제거하고 프로그램의 나머지 부분에서 "students"를 사용합니다.
students.sort(key=score_sort) print("There are {} students in the list.".format(len(students))) for s in students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
코드를 실행하고 어떤 일이 일어나는지 확인하세요:
There are 4 students in the list. Richard earned a score of 63 on their last test. Erin earned a score of 64 on their last test. Peter earned a score of 76 on their last test. Miley earned a score of 89 on their last test.
코드가 성공적으로 실행됩니다. 먼저 코드는 목록에 있는 학생 수를 알려줍니다. 그런 다음 코드는 각 학생에 대한 정보와 마지막 시험에서 얻은 점수를 출력합니다. 이 정보는 학생 학년의 오름차순으로 인쇄됩니다.
원인 #2:반환 문을 잊어버림
우리는 코드를 더 모듈화할 것입니다. 이를 위해 정렬 방법을 자체 기능으로 이동합니다. 또한 각 학생이 시험에서 얻은 점수에 대한 정보를 출력하는 함수를 정의할 것입니다.
먼저 학생 목록과 정렬 도우미 기능을 정의합니다. 튜토리얼의 앞부분에서 이 코드를 빌릴 것입니다.
students = [ {"name": "Peter", "score": 76 }, {"name": "Richard", "score": 63 }, {"name": "Erin", "score": 64 }, {"name": "Miley", "score": 89 } ] def score_sort(s): return s["score"]
다음으로 목록을 정렬하는 함수를 작성합니다.
def sort_list(students): students.sort(key=score_sort)
마지막으로 각 학생의 성과에 대한 정보를 표시하는 함수를 정의합니다.
def show_students(new_students): print("There are {} students in the list.".format(len(students))) for s in new_students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
코드를 실행하기 전에 함수를 호출해야 합니다.
new_students = sort_list(students) show_students(new_students)
프로그램은 먼저 sort_list()
를 사용하여 목록을 정렬합니다. 함수. 그런 다음 우리 프로그램은 각 학생에 대한 정보를 콘솔에 출력합니다. 이것은 show_students()
에서 처리됩니다. 기능.
코드를 실행해 보겠습니다.
Traceback (most recent call last): File "main.py", line 21, in <module> show_students(new_students) File "main.py", line 15, in show_students print("There are {} students in the list.".format(len(new_students))) TypeError: object of type 'NoneType' has no len()
코드가 오류를 반환합니다. 이 오류는 "sort_list" 함수에 "return" 문을 포함하는 것을 잊어버렸기 때문에 발생했습니다.
sort_list()
를 호출할 때 함수에 대한 응답을 "new_students" 변수에 할당합니다. 해당 변수는 show_students()
에 전달됩니다. 각 학생에 대한 정보를 표시하는 기능입니다. 이 오류를 해결하려면 sort_list()
에 return 문을 추가해야 합니다. 함수:
def sort_list(students): students.sort(key=score_sort) return students
코드 실행:
There are 4 students in the list. Richard earned a score of 63 on their last test. Erin earned a score of 64 on their last test. Peter earned a score of 76 on their last test. Miley earned a score of 89 on their last test.
코드는 예상한 응답을 반환합니다.
결론
"TypeError:'NoneType' 유형의 개체에 len()
이 없습니다. ” 오류는 len()
을 사용하려고 할 때 발생합니다. 값이 None인 개체에 대한 메서드입니다.
이 오류를 해결하려면 sort()
와 같은 내장 목록 메서드의 응답을 할당하지 않았는지 확인하십시오. , 변수에. 이렇게 해도 오류가 해결되지 않으면 프로그램이 성공적으로 작동하는 데 필요한 모든 "반환" 문이 있는지 확인하십시오.
이제 Python 전문가처럼 이 문제를 해결할 준비가 되었습니다!