TypeError: cannot unpack non-iterable object (Fix)

This error happens when Python tries to split one value into multiple variables, but that value is not something Python can unpack.

For example, Python can unpack a tuple like (1, 2) into a and b. But it cannot unpack a single integer like 5.

Quick fix

value = 5
# Wrong:
# a, b = value

# Fix 1: assign to one variable
number = value

# Fix 2: unpack an actual iterable
pair = (1, 2)
a, b = pair
print(a, b)

Output:

1 2

Unpacking only works when the value on the right side is an iterable, such as a tuple, list, or string, and it contains the expected number of items.

What this error means

This error means:

  • Python tried to split one value into multiple variables.
  • The value was not iterable, so Python could not unpack it.
  • Common non-iterable values include:
    • int
    • float
    • bool
    • None

A very common pattern that causes this is:

a, b = value

This only works if value is something like:

  • a tuple: (1, 2)
  • a list: [1, 2]
  • a string: "hi"

If value is just one number like 5, Python raises a TypeError.

If you are not familiar with iterables, see iterators and iterable objects explained.

When this error happens

You will usually see this error in one of these situations:

  • Using code like a, b = 10
  • Expecting a function to return multiple values, but it returns one value
  • Looping with unpacking over items that are not pairs or groups
  • Reading data and assuming each item has multiple parts

Common causes include:

  • Trying to unpack an integer into multiple variables
  • Trying to unpack None returned from a function
  • Using a loop that expects pairs but the data contains single values
  • Forgetting that a function returns one value, not multiple values
  • Mixing up dictionary iteration with dictionary .items() iteration

Example that causes the error

Here is a simple example:

a, b = 5

This fails because 5 is a single integer, not a list or tuple.

You will get an error like this:

TypeError: cannot unpack non-iterable int object

The important part is the same in all versions of this error:

  • Python expected something unpackable
  • It got a non-iterable value instead

Fix 1: assign to one variable

If the value is just one item, use one variable.

number = 5
print(number)

Output:

5

Use this fix when you do not actually need unpacking.

Wrong:

a, b = 5

Right:

number = 5

This is the simplest solution when your code only has one value.

Fix 2: return or use an iterable

If you want multiple variables, the value on the right side must be an iterable with the right number of items.

Unpacking a tuple

a, b = (1, 2)
print(a)
print(b)

Output:

1
2

Unpacking a list

a, b = [10, 20]
print(a, b)

Output:

10 20

Returning multiple values from a function

A function that should provide multiple values can return a tuple.

def get_coordinates():
    return (3, 7)

x, y = get_coordinates()
print(x, y)

Output:

3 7

If this part is unclear, you may want to read return values in Python functions.

Fix 3: check what a function really returns

Sometimes the unpacking code looks correct, but the function returns something different from what you expected.

For example:

def get_total():
    return 100

a, b = get_total()

This raises:

TypeError: cannot unpack non-iterable int object

The function returns one integer, not two values.

Debug it first

Print the result before unpacking it:

def get_total():
    return 100

result = get_total()
print(result)
print(type(result))

Output:

100
<class 'int'>

Now the problem is easy to see.

Another common case: returning None

def do_something():
    print("Done")

result = do_something()
print(result)
print(type(result))

Output:

Done
None
<class 'NoneType'>

If you then try:

a, b = do_something()

You will get a similar error:

TypeError: cannot unpack non-iterable NoneType object

That usually means the function did not return the values you expected. This is related to TypeError: 'NoneType' object is not iterable.

Fix 4: unpack loop items correctly

This error often happens in loops.

Wrong: unpacking single numbers

data = [1, 2, 3]

for a, b in data:
    print(a, b)

Each item in data is a single integer, not a pair. So this fails.

Right: use one loop variable

data = [1, 2, 3]

for item in data:
    print(item)

Output:

1
2
3

Right: use pairs if you want unpacking

data = [(1, 2), (3, 4), (5, 6)]

for a, b in data:
    print(a, b)

Output:

1 2
3 4
5 6

Dictionary example

A common mistake is iterating over a dictionary like this:

person = {"name": "Ana", "age": 20}

for key, value in person:
    print(key, value)

This is wrong because looping over a dictionary normally gives you one key at a time.

The correct version is:

person = {"name": "Ana", "age": 20}

for key, value in person.items():
    print(key, value)

Output:

name Ana
age 20

For more help with this pattern, see how to loop through a dictionary in Python.

How to debug this step by step

When you see this error, use this checklist:

  1. Find the line with unpacking, usually something like:
    a, b = value
    
  2. Print the value before that line.
  3. Print its type.
  4. Check whether it is iterable.
  5. Check whether it contains the number of items you expect.

Useful debugging commands:

print(value)
print(type(value))
print(result)
print(type(result))
print(data)

Example:

value = 5

print(value)
print(type(value))

a, b = value

Output before the error:

5
<class 'int'>

That tells you the problem immediately: value is an integer.

You may see slightly different versions of this error:

  • TypeError: cannot unpack non-iterable int object
  • TypeError: cannot unpack non-iterable NoneType object
  • TypeError: cannot unpack non-iterable float object

These all mean the same core thing:

  • Python tried to unpack a value
  • The value was not iterable

This is different from these errors:

Those errors happen when the value is iterable, but it has the wrong number of items.

FAQ

What does non-iterable mean in Python?

It means the value cannot be looped over or unpacked item by item. Examples include int, float, bool, and None.

Can I unpack a string in Python?

Yes. A string is iterable, so you can unpack it if it has the expected number of characters.

Example:

a, b = "hi"
print(a, b)

Output:

h i

Why do I get this error from a function call?

Usually because the function returned one value, or returned None, but your code expected multiple values.

How is this different from not enough values to unpack?

This error means the value is not iterable at all.
not enough values to unpack means the value is iterable, but it does not contain enough items.

See also