GIL's LAB

ValueError: too many values to unpack, ValueError: not enough values to unpack 해결 방법 본문

파이썬/환경설정 및 오류 해결

ValueError: too many values to unpack, ValueError: not enough values to unpack 해결 방법

GIL~ 2023. 8. 7. 09:50

문제 상황

ValueError: too many values to unpack는 저장할 값의 개수가 변수 개수보다 많은 경우 발생하는 에러입니다.

간단한 예제를 살펴보겠습니다.

x, y, z = 1, 2, 3, 4

[실행 결과]

ValueError: too many values to unpack (expected 3)

위 코드에서 변수는 x, y, z로 세 개인데, 여기에 입력되는 값이 1, 2, 3, 4라서 오류가 발생했습니다.

 

반대로 ValueError: not enough values to unpack는 저장할 값의 개수가 변수 개수보다 적은 경우 발생하는 에러입니다.

역시 간단한 예제를 살펴보겠습니다.

 

x, y, z = 1, 2

[실행 결과]

ValueError: not enough values to unpack (expected 3, got 2)

에러에서 알 수 있듯이, 세 개의 값이 필요한데 두 개만 들어왔다고 오류가 발생합니다.

 

해결 방법

가장 좋은 해결책은 다음과 같이 저장할 값의 개수와 변수 개수를 일치시키는 것입니다.

x, y, z = 1, 2, 3

 

그런데 몇 개의 값이 들어올지 확신할 수 없는 경우가 있습니다. 예를 들어, split 함수를 써서 문자열을 분리하고 앞 두 개 값만 가져오고 싶다고 해보겠습니다. 

s = "1/2/3"
x, y, _ = s.split('/')

우리가 관심있는 변수는 x와 y이고, 나머지 하나는 사용하지 않을 것이므로 언더바(_)로 값을 받았습니다.

 

그런데 앞 두 개는 확실히 필요한데, /의 개수를 알 수 없는 경우 혹은 /가 너무 많아서 변수를 일일이 지정하기 어려운 경우에는 어떻게 할까요?

즉, 아래와 문자열이 있다고 해보겠습니다.

s = "1/2/3/4/5/6/7/8/9/10"

우리에게는 맨 앞 두개만 필요하므로 다음과 같이 처리할 수 있을 것입니다.

x, y, _, _, _, _, _, _, _, _ = s.split('/')

코드가 쓸데없이 길어져서 가독성을 헤치고 어차피 필요없는 변수들인데 일일이 _ 처리하는 것도 귀찮습니다.

이러한 경우에는 애스터리스크(*)를 사용하면 손쉽게 처리할 수 있습니다.

x, y, *_ = s.split('/')
print(x, y)
print(_)

[실행 결과]

1 2
['3', '4', '5', '6', '7', '8', '9', '10']

위 결과에서 알 수 있듯이, 변수 앞에 *를 붙이면 나머지 값들을 모두 리스트 형태로 가져오게 됩니다.

 


데이터 분석 서비스가 필요한 분은 아래 링크로! 

https://kmong.com/gig/374194 

 

데이터사이언스 박사의 데이터 분석 서비스 드립니다. | 150000원부터 시작 가능한 총 평점 5점의 I

78개 총 작업 개수 완료한 총 평점 5점인 데이터사이언스박사의 IT·프로그래밍, 데이터 분석·시각화 서비스를 68개의 리뷰와 함께 확인해 보세요. IT·프로그래밍, 데이터 분석·시각화 제공 등 150

kmong.com

 

Comments