ValueError: too many values to unpack (Fix)
ValueError: too many values to unpack happens when Python tries to assign more values than your variables can hold.
This usually appears when:
- you unpack a list or tuple into too few variables
- a
forloop expects the wrong number of values - a function returns more values than expected
split()gives you more parts than you planned for
The fix is usually simple: make the number of variables match the number of values, or use starred unpacking to collect extras.
Quick fix
values = [1, 2, 3]
a, b, c = values # number of variables matches number of items
pairs = [("a", 1), ("b", 2)]
for key, value in pairs:
print(key, value)
Match the number of variables to the number of values. In loops, also check the shape of each item you are unpacking.
What this error means
Python lets you unpack values into separate variables.
For example:
x, y = (10, 20)
print(x)
print(y)
Output:
10
20
Here, the tuple has 2 items, and there are 2 variables.
The error happens when the value on the right side has more items than the variables on the left side.
A common example is trying to unpack 3 items into 2 variables.
A simple example that causes the error
values = [1, 2, 3]
a, b = values
This raises:
ValueError: too many values to unpack (expected 2)
Why?
valuescontains 3 itemsa, bonly provides 2 variables- Python does not know what to do with the extra item
To fix it, either use 3 variables:
values = [1, 2, 3]
a, b, c = values
print(a, b, c)
Output:
1 2 3
Why it happens
This error usually means your code expected a different shape of data.
Common causes include:
- The value on the right side has more items than expected.
- A loop is unpacking each item incorrectly.
- A function returns more values than your code expects.
- A string split produces more parts than your variables can hold.
For example, if you are learning how functions return multiple values, see Python functions explained.
Fix 1: Use the correct number of variables
If you know exactly how many values you will get, use the same number of variables.
Example with a tuple
point = (5, 10, 15)
x, y, z = point
print(x)
print(y)
print(z)
Output:
5
10
15
Example with a function return value
def get_user():
return "Sam", 25, "admin"
name, age, role = get_user()
print(name, age, role)
Output:
Sam 25 admin
This is the best fix when:
- the number of values is fixed
- you know exactly what each value means
- you want clear variable names
Fix 2: Use starred unpacking
Sometimes you only care about the first or last values, and the number of extra items may change.
In that case, use starred unpacking with *.
data = [10, 20, 30, 40, 50]
first, *middle, last = data
print(first)
print(middle)
print(last)
Output:
10
[20, 30, 40]
50
The *middle part collects all extra values into a list.
This is helpful when:
- the number of extra items is not fixed
- you want to ignore or collect the remaining values
- you only need part of the sequence
Another simple example:
values = [1, 2, 3]
a, *rest = values
print(a)
print(rest)
Output:
1
[2, 3]
If you want to understand unpacking more generally, it can help to review Python statements and expressions.
Fix 3: Check loops that unpack items
A very common cause is a loop like this:
data = [(1, 2, 3), (4, 5, 6)]
for a, b in data:
print(a, b)
This fails because each item has 3 values, but the loop expects 2.
You can fix it by matching the shape of each item:
data = [(1, 2, 3), (4, 5, 6)]
for a, b, c in data:
print(a, b, c)
Output:
1 2 3
4 5 6
Watch out for mixed data
If items have different lengths, unpacking can fail partway through the loop.
data = [(1, 2), (3, 4, 5)]
for a, b in data:
print(a, b)
The first item works, but the second item has 3 values, so Python raises the error there.
This also happens often when looping through dictionaries incorrectly. If you need help with that, see how to loop through a dictionary in Python.
Fix 4: Check split() results
String splitting is another common source of this error.
text = "apple,banana,cherry"
first, second = text.split(",")
This raises the error because split(",") returns 3 parts:
['apple', 'banana', 'cherry']
Fix by using enough variables
text = "apple,banana,cherry"
first, second, third = text.split(",")
print(first)
print(second)
print(third)
Fix by limiting the split
If you only want 2 parts, use maxsplit:
text = "apple,banana,cherry"
first, rest = text.split(",", maxsplit=1)
print(first)
print(rest)
Output:
apple
banana,cherry
If you want more detail on how this method works, see the Python string.split() method.
Debugging steps
When you see this error, the fastest way to fix it is to inspect the value before unpacking.
Useful checks:
print(value)
print(type(value))
print(len(value))
If the problem happens in a loop:
for item in data:
print(item, len(item))
If the problem involves string splitting:
print(text.split(','))
What to look for
- Print the value before unpacking it.
- Use
len()when the value is a list, tuple, or other sequence. - Check what each loop item looks like.
- Read the full traceback and find the exact line where unpacking happens.
For example:
data = [("a", 1), ("b", 2, 3)]
for item in data:
print(item, len(item))
Output:
('a', 1) 2
('b', 2, 3) 3
Now the problem is clear: not every item has the same number of values.
Related errors and similar cases
Do not confuse this error with these similar ones:
ValueError: not enough values to unpack
This is the opposite problem. You have fewer values than variables.TypeError: cannot unpack non-iterable object
This happens when the value cannot be unpacked at all.
Common causes
Here are the most common situations that trigger this error:
- Unpacking a tuple or list into too few variables
- Using
for a, b in ...when items contain 3 or more values - Splitting a string into more parts than expected
- Expecting a function to return 2 values when it returns 3
- Unpacking dictionary iteration incorrectly
FAQ
What does "unpack" mean in Python?
It means assigning items from a sequence like a list or tuple into separate variables.
Why do I get this error in a for loop?
Each item in the loop likely has more values than the variables in the loop header.
How do I ignore extra values?
Use starred unpacking such as first, *rest = values.
Is this the same as "not enough values to unpack"?
No. That error means you have fewer values than variables. This one means you have more values than variables.