데이터베이스에 저장된 데이터를 받아와 반복문을 사용하여 출력하는 과정에서 다음과 같은 에러가 발생하였다.
TypeError: 'NoneType' object is not iterable
파이썬 프로그래밍에서 자주 발생하는 에러 상황 중 타입과 관련된 에러가 있다.
그 중 하나가 ' 'NoneType' object is not iterable '이다. 이것은 파이썬에서 객체를 얻어와 반복문에 사용하는 과정에서 발생한다.
다음 코드에서는 데이터베이스에서 json 형식으로 저장된 데이터를 읽어와 해당 데이터를 반복문에 사용하고 있다.
여기에서는 파이어베이스 데이터베이스에서 데이터를 읽어오고 있다.
DB = DBhandler()
....
data = DB.get_datas() #DB에서 데이터 받아오기
datas = data.items()
for data in datas :
(반복 실행문)
❓ [오류 원인]
' 'NoneType' object is not iterable ' 에러는 반복문에 사용할 객체가 None 값을 가질 때 발생한다.
파이썬에는 함수가 아무것도 리턴하지 않은 경우 'None'이라는 값을 리턴하는데, None 값은 iterable 값이 아니기 때문에 반복문에서 사용할 수 없다. 즉, 반복문에 사용할 객체가 반복 가능한 타입이 아니기 때문에 에러가 발생한다.
위 코드에서는 데이터 베이스에 아직 아무런 데이터가 저장되어 있지 않기 때문에 DB.get_datas() 함수가 None 값을 리턴하게 되고 None 값인 객체를 for 반복문에 사용하였기 때문에 에러가 발생하였다.
✅ [해결 방법]
if data == None: #저장된 데이터 없음
(데이터베이스에 저장된 값이 없을 때 수행할 실행문)
else: #저장된 데이터 있음
for data in datas :
(반복 실행문)
데이터베이스에 아무것도 저장되어 있지 않을 경우를 고려하여 데이터베이스에 저장된 데이터 존재 여부를 확인하는 조건문을 작성하였다.
data가 None 값일 경우, 즉 데이터베이스에서 읽어올 데이터가 없는 경우에 수행할 별도의 작업을 추가하고
data가 None 값이 아닐 경우, 즉 데이터베이스에 저장된 데이터가 있는 경우에 반복문을 수행한다.
Tip : 함수가 리턴하는 값을 사용할 때 None 값이 리턴되는 상황이 있을 수 있다는 것을 인지하고 확인하도록 하자.
* 명시적인 리턴문이 없는 경우 None이 리턴될 수 있음을 주의하라.
'python' 카테고리의 다른 글
[python] 데이터 분석을 위한 기초 문법3 - 제어문 (0) | 2023.01.05 |
---|---|
[python] 데이터 분석을 위한 기초 문법2 - 연산자 (0) | 2023.01.03 |