AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
-
Python에서
AttributeError: 'NoneType' 개체에 'group' 속성이 없습니다.
의 원인 -
try-except
를 사용하여 Python에서AttributeError: 'NoneType' 개체에 'group' 속성이 없음
해결 -
if-else
를 사용하여 Python에서AttributeError: 'NoneType' 개체에 'group' 속성이 없음
해결
Python 정규식(regex)은 특수 문자 또는 패턴의 문자열을 일치시키고 추출합니다. Python에서 정규 표현식이 지정된 문자열과 일치하지 않으면 AttributeError: 'NoneType' object has no attribute 'group'
정규 표현식이 발생합니다.
이 기사에서는 이러한 유형의 오류에 대한 가능한 해결책을 살펴보겠습니다.
Python에서 AttributeError: 'NoneType' 개체에 'group' 속성이 없습니다.
의 원인
클래스나 데이터 유형을 정의할 때마다 해당 클래스와 관련된 속성에 액세스할 수 있습니다. 그러나 우리가 정의한 클래스가 소유하지 않은 객체의 속성이나 속성에 액세스한다고 가정합니다.
이 경우 'NoneType' 객체에 '그룹' 속성이 없음
이라는 AttributeError
가 발생합니다. NoneType
은 None
값을 포함하는 개체를 나타냅니다.
이러한 유형의 오류는 초기에 변수를 없음으로 설정한 경우에도 발생합니다. 다음 프로그램은 단어 시작 부분에서 대문자 F
를 검색하는 프로그램입니다.
예제 코드:
# Python 3.x
import re
a = "programmig is Fun"
for i in a.split():
b = re.match(r"\bF\w+", i)
print(b.group())
출력:
#Python 3.x
AttributeError Traceback (most recent call last)
C:\Users\LAIQSH~1\AppData\Local\Temp/ipykernel_2368/987386650.py in <module>
3 for i in a.split():
4 b=re.match(r"\bF\w+", i)
----> 5 print(b.group())
AttributeError: 'NoneType' object has no attribute 'group'
이 오류는 정규식이 첫 번째 반복에서 문자열의 지정된 문자와 일치할 수 없기 때문에 발생합니다. 따라서 group()
에 액세스할 때 컴파일러는 None 유형의 객체에 속하기 때문에 AttributeError
를 표시합니다.
try-except
를 사용하여 Python에서 AttributeError: 'NoneType' 개체에 'group' 속성이 없음
해결
이 오류를 제거하는 한 가지 방법은 코드에서 예외 처리를 사용하는 것입니다. 이런 식으로 제외
블록이 오류를 처리합니다.
이제 이전 프로그램을 고려하고 다음과 같이 try-except
블록을 추가합니다.
예제 코드:
# Python 3.x
import re
a = "programmig is Fun"
for i in a.split():
b = re.match(r"\bF\w+", i)
try:
print(b.group())
except AttributeError:
continue
출력:
#Python 3.x
Fun
이제 프로그램이 잘 작동하는 것을 볼 수 있습니다. 여기서 continue
키워드는 b
가 반환하지 않는 곳을 건너뛰고 다음 반복으로 건너뛰고 F
로 시작하는 단어를 검색하는 데 사용됩니다.
따라서 Fun
이라는 용어가 출력에 인쇄됩니다.
if-else
를 사용하여 Python에서 AttributeError: 'NoneType' 개체에 'group' 속성이 없음
해결
'NoneType' object has no attribute 'group'
오류를 방지하는 또 다른 간단한 솔루션은 프로그램에서 if-else
문을 사용하는 것입니다. 다음 프로그램은 문자열에서 1에서 5까지의 숫자를 확인합니다.
정규식과 일치하는 숫자가 없으므로 AttributeError
가 발생합니다. 그러나 if-else
블록을 사용하면 오류를 피할 수 있습니다.
조건이 충족되지 않으면 일치 항목이 없을 때 else
블록의 명령문이 실행됩니다.
# Python 3.x
import re
a = "foo bar 678 baz"
x = r".* ([1-5]+) .*"
matches = re.match(x, a)
if matches:
print(matches.group(1))
else:
print("No matches!")
출력:
#Python 3.x
No matches!
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn