Python
valueerror: too many values to unpack (expected 2)
is an unpacking error that occurs when we try to unpack fewer variables than the actual number of elements present in the iterator.
In this Python guide, we will walk through this error and discuss why it is raised and how to solve it. We will also see some examples which will give you a broad idea of why this error occurs and how to debug it. So let's get started with the Problem itself.
The Problem: valueerror: too many values to unpack (expected 2)
The error statement is divided into parts
-
valueerror
-
too many values to unpack(expected 2)
The
valueerror
in Python specifies that we are doing something wrong with assigning values to an object. And the statement
too many values to unpack(expected 2)
specifies the main error. It defines that the unpacking variables are less than the total number of iterators present in the iterator.
Python unpacking is a technique to assign values of an iterable object to multiple elements using a single statement.
Python unpacking Example
# list
greeting = ["Hi", "Hello", "Hey"]
# python unpacking
opt1, opt2, opt3 = greeting
print("opt1:", opt1)
print("opt2:", opt2)
print("opt3:", opt3)
Output
opt1: Hi
opt2: Hello
opt3: Hey
In our above example, we unpacked our
greeting
iterable(list) into 3 variables
opt1
,
opt2
and
opt3
using the statement
opt1, opt2, opt3 = greeting
.
If we analyze it, we can see that the number of variables to which we assigned the values is equal to the number of elements present in the list
greeting
. But if we reduce the number of variables only to 2, we would receive the error
too many values to unpack(expected 2)
.
Example
# list
greeting = ["Hi", "Hello", "Hey"]
# unpacking only two values
opt1, opt2 = greeting
print("opt1:", opt1)
print("opt2:", opt2)
Output
Traceback (most recent call last):
File "main.py", line 5, in <module>
opt1, opt2 = greeting
ValueError: too many values to unpack (expected 2)
Break the Output
We are receiving this error because the
greeting
list has 3 elements, but during unpacking, the statement at
line 5
we are only unpacking 2 variables
opt1
and
opt2
, which is illegal. During iterable unpacking Python interpreter expect the
n
number of variables at the left side of the assignment operator, where
n
is the total number of elements present in the list.
If the variables on the left side during iterable unpacking are greater than 1 and less than n, we receive the error
ValueError: too many values to unpack (expected n)
. The error message itself describes that the list has many elements to unpack, but we are specifying fewer variable names.
Solutions
There are two solutions to this problem.
Solution 1 (unpack all values)
The first solution is very straightforward. We just need to specify the equal number of variables on the left side of the assignment as the number of elements we have in the iterable.
Example
# list
greeting = ["Hi", "Hello", "Hey"]
# unpacking all the values
opt1, opt2, opt3 = greeting
print("opt1:", opt1)
print("opt2:", opt2)
print("opt3:", opt3)
Output
opt1: Hi
opt2: Hello
opt3: Hey
Solution 2 (use *_ variable)
It is also possible that an iterable has millions of elements, and you only wish to unpack the first two values. In that case, we can't use million variable names only to unpack the first two values. You could also say we can use Python slicing, but it will only be available for sets and dictionaries.
So, in such cases, we can use the
*_
variable name after the number of variables we want to unpack. The
*_
variable represents a throw-away variable for the list.
*
the symbol represents multiple arguments, and the
_
variable name represents a throwaway variable that we will not use in our program.
Example
# list
greeting = ["Hi", "Hello", "Hey"]
# unpacking only two values
opt1, opt2, *_ = greeting
print("opt1:", opt1)
print("opt2:", opt2)
Output
opt1: Hi
opt2: Hello
Conclusion
In this Python tutorial, we discussed the Python error
valueerror: too many values to unpack (expected 2)
and how to solve it. The
2
in the error message is the number of variables we are trying to unpack and it could be any number greater than 1 and less than n, where n is the total number of elements present in the iterable object.
If you only want to unpack a limited number of elements from an iterable object there, you can use the
*_
variable name, it will store all rest of the values of an iterable object in the throwaway list. If you are still getting the error in your Python program, please comment down your code, and we will try to debug it for you.
People are also reading:
- Python Decorators
- Read File in Python
- Multiple Inheritance in Python
- How to Play sounds in Python?
- Python Iterators
- What is a constructor in Python?
- Inheritance in Python
- Python ValueError: invalid literal for int() with base 10: Solution
- Python Generators
- Python typeerror: ‘str’ object is not callable Solution
Leave a Comment on this Post