안녕하세요 이번 포스팅에서는 파이썬 수행 시 발생할 수 있는 오류 중에 하나인 "AttributeError: 'NoneType' object has no attribute 'find'"에 대해서 설명드리겠습니다. 쉬운 이해를 돕기 위해서 예제를 통해서 설명드리겠습니다.
에러 발생 배경 코드
: "AttributeError: 'NoneType' object has no attribute 'find'" 에러가 발생한 배경코드를 먼저 말씀드리겠습니다. 코드는 아래와 같습니다. 아래 코드를 보시면 어떤 내용에서 특정 문구를 찾는 함수인 find()를 사용하는 함수입니다. 즉 엑셀 내용 중에 특정 문구가 있는지를 먼저 물어보고 있으면 그에 대한 결과 값을 출력하는 코드입니다.
▼ 관련 Source file인 엑셀 내부 내용도 참조하시라고 첨부하도록 하겠습니다.
#엑셀파일을 불러오고 편집하는 패키지 openpyxl을 선언
import openpyxl
#불러오고 싶은 파일 경로 및 파일 이름을 지정
wb = openpyxl.load_workbook(filename = r'D:\TEST1.xlsx')
worksheet = wb.active
#해당 셀에 '0' 이라는 문자가 있는지 없는 지 결과값을 출력
result = worksheet['A2'].value
result1 = result.find('0')
에러 구문 분석 및 해결책
: 위의 코드를 실행을 해보면 아래와 같은 에러가 출력이 되는 걸 확인 하실 수 있습니다. 해당 에러 구문을 살펴보도록 하겠습니다. 해당 에러 구문의 분석 및 설명을 드리면서 해결책도 같이 설명드리겠습니다.
Traceback (most recent call last):
File "D:/002. Python/TEST_1.py", line 16, in <module>
result1 = result.find('0')
AttributeError: 'NoneType' object has no attribute 'find'
Process finished with exit code 1
1) 'NoneType' object 라는 것은 해당 셀에 아무런 값이 없는 것입니다. 즉 아무런 값을 가지지 않으니까 검색 or 찾을 것도 없다는 거죠. 그러니까 find 함수는 가지고 있지 않다는 경고를 주는 구문입니다.
2) 이럴 경우에는 해당 셀이나 검색하고 싶은 내용이 있는 데이터 장소에 데이터가 있는지에 대해서 확인 후 조건 문을 통해서 "NoneType" 이 아닐 경우만 검색하라고 처리하면 에러를 해결하실 수 있습니다.
▼ 이 밖에도 여러 가지 처리 방식이 있지만 저는 이 방법으로 해결 완료하였습니다. 참조하세요.
#엑셀파일을 불러오고 편집하는 패키지 openpyxl을 선언
import openpyxl
#불러오고 싶은 파일 경로 및 파일 이름을 지정
wb = openpyxl.load_workbook(filename = r'D:\TEST1.xlsx')
worksheet = wb.active
result = worksheet['A2'].value
# 해당 셀의 내용이 None이 아닐 경우에만 코드를 실행
if result != None:
result1 = result.find('0')
print(result1) #해당 셀에 '0' 이라는 문자가 있는지 없는 지 결과값을 출력
else:
print("result value가 None 입니다.")
위에서 사전 구문을 추가하여 처리하면 아래와 같은 결과가 출력이 되는 걸 확인하실 수 있습니다. 해당 셀이 None이기 때문에 print 함수로 선언한 "result value가 None 입니다." 가 출력이 되는 걸 확인 하실 수 있습니다.
이상입니다. 지금까지 파이썬 수행 시 발생할 수 있는 오류 중에 하나인 "AttributeError: 'NoneType' object has no attribute 'find'"에 대해서 포스팅 작성하였습니다. 이렇게 에러를 만나서 해결하는 게 진짜 실력이지 않을까 라는 생각이 요즘 많이 듭니다. 그럼 이만 마무리하겠습니다. 감사합니다.
[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁드립니다. 검토 후 수정 및 삭제 조치하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을 때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]
관련 다른 글
'파이썬 (Python) > General' 카테고리의 다른 글
Python trim 기능 구현 할 수 있는 코드 & 함수 (0) | 2021.03.19 |
---|---|
Python timer 패키지 이용하기 (0) | 2021.03.07 |
Python 파이썬 try except 구문 (0) | 2021.03.07 |
파이썬 - 함수 데코레이터(decorator), 클래스 데코레이터(decorator) (0) | 2021.03.05 |
Python 파이썬 - Progress Bar 구현하기 + tqdm 모듈 이용하기 (0) | 2021.02.20 |
댓글