TypeError 해결: Nonetype 개체는 Python에서 첨자를 사용할 수 없습니다.
Python에는 인덱싱을 지원하는 목록, 튜플 및 사전과 같은 다양한 시퀀스 데이터 유형이 있습니다. 첨자라는 용어는 인덱싱하는 동안 사용되는 값을 나타내므로 이러한 개체는 첨자 가능 개체라고도 합니다.
Python에서 이러한 첨자 가능 객체의 잘못된 인덱싱은 종종 TypeError: 'NoneType' object is not subscriptable
을 초래합니다. 이 기사에서는 이 오류와 가능한 해결 방법에 대해 설명합니다.
준비가 된? 의 시작하자!
Python의 TypeError: 'NoneType' 개체는 첨자할 수 없습니다
TypeError: 'NoneType' object is not subscriptable
이 발생하는 이유와 해결 방법을 살펴보기 전에 먼저 몇 가지 기본 사항을 살펴보겠습니다.
Python의 NoneType 및 Subscriptable 객체 소개
Python에서 NoneType
개체는 값이 없는 개체입니다. 즉, 아무 것도 반환하지 않는 객체입니다.
None
값은 종종 무언가를 검색하지만 찾지 못하는 함수에 의해 반환됩니다. 다음은 함수가 None
값을 반환하는 예입니다.
def none_demo():
for i in [1, 2, 3, 4, 5]:
if i == 10:
return yes
ans = none_demo()
print(ans)
출력:
None
이름에서 알 수 있듯이 첨자 가능 개체에 대해 말하면 이들은 첨자 또는 색인화할 수 있는 Python 개체입니다. 간단히 말해서, 첨자 가능한 객체는 0, 1 등과 같은 인덱스 값의 도움으로 액세스하거나 순회할 수 있는 객체입니다.
목록, 튜플 및 사전이 이러한 개체의 예입니다. 다음은 인덱싱을 사용하여 목록을 순회하는 방법을 보여주는 코드입니다.
cakes = ["Mango", "Vanilla", "Chocolate"]
for i in range(0, 3):
print(cakes[i])
출력:
Mango
Vanilla
Chocolate
이제 기본 사항을 잘 알았으니 앞으로 나아가 봅시다!
Python에서 TypeError: 'NoneType' 개체는 첨자할 수 없습니다
해결
Python에는 reverse()
, sort()
및 append()
와 같은 내장 함수가 있어 첨자 가능한 객체에 사용할 수 있습니다. 그러나 이러한 기본 제공 함수의 결과를 변수에 할당하면 TypeError: 'NoneType' 개체는 첨자할 수 없습니다
가 발생합니다.
아래 주어진 예를 보십시오. 여기에서 desserts
라는 목록에서 reverse()
함수를 사용하고 결과를 ans
변수에 저장했습니다.
그런 다음 변수 ans
값을 인쇄했는데 출력에서 볼 수 있듯이 None
으로 판명되었습니다. 그러나 마지막 문장은 TypeError: 'NoneType' object is not subscriptable
로 이어집니다.
왜 이런 일이 일어났는지 짐작이 가나요?
desserts = ["cakes", "pie", "cookies"]
ans = desserts.reverse()
print("The variable ans contains: ", ans)
print(ans[0])
출력:
The variable ans contains: None
Traceback (most recent call last):
File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable
이것은 마지막 줄에서 변수 ans
를 첨자화했기 때문에 발생했습니다. 변수 ans
에는 시퀀스 데이터 유형도 아닌 None
값이 포함되어 있습니다. 따라서 인덱싱으로 액세스할 수 없습니다.
여기서 이해해야 할 중요한 점은 변수 ans
에 역방향 목록을 할당하더라도 해당 변수 ans
를 목록 유형으로 만들지는 않는다는 것입니다. 따라서 목록으로 간주하여 인덱싱을 사용하여 변수 ans
에 액세스할 수 없습니다.
실제로 ans
변수는 NoneType
개체이며 Python은 이러한 개체의 인덱싱을 지원하지 않습니다. 따라서 첨자할 수 없는 개체를 인덱싱하려고 시도해서는 안 됩니다. 그렇지 않으면 TypeError: 'NoneType' 개체는 첨자할 수 없습니다.
가 발생합니다.
위의 코드에서 이 문제를 해결하려면 아래 접근 방식을 따르십시오.
이번에는 reverse()
작업의 결과를 변수에 할당하지 않습니다. 이렇게 하면 함수가 추가 공간 없이 현재 목록을 반전된 목록으로 자동으로 대체합니다.
나중에 원하는 대로 목록을 인쇄할 수 있습니다. 여기서는 먼저 전체 반전 목록을 인쇄한 다음 아래첨자 0을 사용하여 첫 번째 요소에 액세스합니다.
보시다시피 코드가 제대로 실행되고 원하는 출력이 제공됩니다.
desserts = ["cakes", "pie", "cookies"]
desserts.reverse()
print(desserts)
print(desserts[0])
출력:
['cookies', 'pie', 'cakes']
cookies
결과를 변수에 할당하지 않고 인덱싱하는 동일한 규칙은 sort()
및 append()
와 같은 다른 함수에도 적용됩니다. 다음은 sort()
함수를 사용하고 TypeError: 'NoneType' object is not subscriptable
로 실행되는 예입니다.
desserts = ["cakes", "pie", "cookies"]
ans = desserts.sort()
print("The value of the variable is: ", ans)
print(ans[1])
출력:
The value of the variable is: None
Traceback (most recent call last):
File "<string>", line 4, in <module>
TypeError: 'NoneType' object is not subscriptable
다시 말하지만 이것은 같은 이유로 발생합니다. 이 오류를 제거하려면 정렬된 목록을 저장하기 위해 다른 변수의 사용을 중단해야 합니다.
이것은 아래에서 수행됩니다.
desserts = ["cakes", "pie", "cookies"]
desserts.sort()
print(desserts)
print(desserts[1])
출력:
['cakes', 'cookies', 'pie']
cookies
이번에는 sort()
메서드가 추가 공간 없이 목록을 새로 정렬된 목록으로 바꾸는 것을 볼 수 있습니다. 나중에 이 오류에 대한 걱정 없이 인덱싱을 사용하여 정렬된 목록의 개별 요소에 액세스할 수 있습니다!
그리고 여기에 흥미로운 것이 있습니다. 들을 준비가 되셨나요?
sort()
함수의 경우 여전히 별도의 변수를 사용하여 정렬된 목록을 저장하려면 sorted()
함수를 사용할 수 있습니다. 이것은 아래에서 수행됩니다.
desserts = ["cakes", "pie", "cookies"]
ans = sorted(desserts)
print(ans)
print(ans[0])
출력:
['cakes', 'cookies', 'pie']
cakes
목록을 제자리에 정렬하는 sort()
메서드와 달리 sorted()
함수는 정렬된 목록을 반환하기 때문에 오류가 발생하지 않는다는 것을 알 수 있습니다.
그러나 안타깝게도 reverse()
및 append()
메서드에 대한 대체 함수가 없습니다.
이번 글은 여기까지입니다. 이 주제에 대한 자세한 내용은 이 설명서를 참조하십시오.
결론
이 기사는 Python의 'NoneType' object not subscriptable
TypeError에 대해 설명했습니다. 시퀀스 데이터 유형에서 reverse()
및 append()
와 같은 작업을 수행하는 값을 변수에 할당하면 이 오류가 발생하는 것을 보았습니다.
또한 처음부터 이 오류가 발생하지 않도록 sort()
함수 대신 sorted()
함수를 사용하여 이 오류를 수정하는 방법도 확인했습니다.
관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.