나는 python으로 백준 문제를 풀곤 하는데, TypeError: cannot unpack non-iterable NoneType object
오류를 종종 발견해서 이번에 제대로 기억하고자 정리해본다.
확인해보니 여러 경우가 존재하는데, 우선 나는 이와 같은 형태의 코드로 인해 오류가 발생했다.
nums = list(map(int,input().split())) #[1 2 3 4]
for num in range(len(nums)):
a,b = func(num) #특정 함수의 리턴값
print(a,b)
우선 nums에 저장된 값들의 수만큼 반복을 함으로써 func(num)
의 값을 받아 a와 b에 각각 저장하려고 코드를 입력했다.
여기서 내가 실수한 부분은 for num in range(len(nums)) 인데, 본래 의도한 것은 nums
에 1 2 3 4
가 저장되어있으면, 이를 하나씩 꺼내 쓰면서 num=1
, num=2
, num=3
, num=4
를 차례대로 써먹으려고 입력하였다.
하지만 len(nums)
로 입력하면 4
번 반복하긴 하지만 nums
에 저장된 값은 써먹지 못한다. 그래서 func(num)
의 리턴값은 None
으로 나오고 이런 None
값은 a
,b
로 분해가능한 객체가 아니므로 결과적으로 TypeError가 발생한다.
for num in nums:
a,b = func(num)
print(a,b)
이처럼 바꿔주면 num
값은 반복문에 따라 순서대로 1
,2
,3
,4
값을 이용하여 성공적으로 돌아간다.