KeyError: popitem(): dictionary is empty (Fix)

Fix the Python error "KeyError: popitem(): dictionary is empty". This error happens when you call popitem() on a dictionary that has no items left.

This page explains what the error means, shows a small example that causes it, and gives simple ways to avoid it.

Quick fix #

Check that the dictionary is not empty before calling popitem():

data = {}

if data:
    key, value = data.popitem()
else:
    print("Dictionary is empty")

An empty dictionary is False, so if data: is a simple way to avoid this error.

What this error means #

popitem() is a dictionary method that removes and returns one key-value pair.

If the dictionary is empty, there is nothing to remove. Python raises:

KeyError: 'popitem(): dictionary is empty'

If you are new to dictionaries, see Python dictionaries explained.

Example that causes the error #

This code creates an empty dictionary and then calls popitem() on it:

data = {}
data.popitem()

Output:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 'popitem(): dictionary is empty'
Traceback (most recent call last):File "example.py", line 2, in <module>data.popitem()KeyError: 'popitem(): dictionary is empty'Where it happened — file and lineWhat went wrong — the exception typeWhy — the detailed message
Read this bottom-up: popitem() failed because the dictionary has no items left.

Why this fails:

  • data is {}, which means it has no key-value pairs
  • popitem() tries to remove one pair
  • There is nothing to remove, so Python raises KeyError

If you want to learn more about how this method works, see the Python dictionary popitem() method.

Why it happens #

This error usually happens for one of these reasons:

  • The dictionary started empty
  • Items were removed earlier in the program
  • A loop kept calling popitem() after the dictionary became empty
  • You expected data from another function, but it returned an empty dictionary

Here is a common loop mistake:

data = {"a": 1}

while True:
    print(data.popitem())

This removes the only item first. On the next loop, the dictionary is empty, so the error happens.

How to fix it #

There are a few simple ways to fix this error.

Check if the dictionary has items #

This is the clearest fix for beginners:

data = {"name": "Alice"}

if data:
    item = data.popitem()
    print(item)
else:
    print("Dictionary is empty")

Output:

('name', 'Alice')

if data: works because:

  • non-empty dictionaries are True
  • empty dictionaries are False

Use an explicit length check #

If you want to be more explicit, use len():

data = {}

if len(data) > 0:
    print(data.popitem())
else:
    print("Dictionary is empty")

This does the same thing, but if data: is shorter and more common.

Use try-except when empty dictionaries are expected #

Sometimes an empty dictionary is normal in your program. In that case, you can catch the error:

data = {}

try:
    key, value = data.popitem()
    print(key, value)
except KeyError:
    print("Dictionary is empty")

This works, but for beginners, an if check is usually easier to read.

Review earlier code #

Sometimes popitem() is not the real problem. The real issue is that the dictionary became empty earlier.

For example:

data = {"x": 1, "y": 2}

data.clear()
data.popitem()

data.clear() removes everything, so popitem() fails after that.

If you are removing a specific key instead of an arbitrary item, see how to remove a key from a dictionary in Python.

The safest pattern is:

  1. Check whether the dictionary is empty
  2. Use popitem() only when there is at least one item
  3. Handle the empty case with a message, return value, or different logic

Example:

def remove_one_item(data):
    if data:
        return data.popitem()
    return None

info = {}
result = remove_one_item(info)

print(result)

Output:

None

This is usually clearer than relying on exceptions for normal program flow.

Debugging steps #

If you are not sure why the error is happening, inspect the dictionary right before popitem().

Useful checks:

print(my_dict)
print(len(my_dict))
print(bool(my_dict))
print(my_dict.keys())

What these show:

  • print(my_dict) shows the full dictionary
  • print(len(my_dict)) shows how many items it has
  • print(bool(my_dict)) shows False when it is empty
  • print(my_dict.keys()) shows the current keys

You can also:

  • Print the dictionary right before popitem()
  • Trace where items are removed earlier
  • Check whether clear(), pop(), or another popitem() emptied it
  • If using a loop, make sure the loop stops when the dictionary becomes empty

A safe loop looks like this:

data = {"a": 1, "b": 2}

while data:
    print(data.popitem())

print("Done")

Output:

('b', 2)
('a', 1)
Done

Common mistakes #

These are common causes of this error:

  • Calling popitem() on {}
  • Using popitem() inside a while loop without checking if items remain
  • Removing all dictionary items earlier with clear(), pop(), or popitem()
  • Assuming loaded or returned data is non-empty when it is actually empty

If you are dealing with a broader dictionary key problem, see KeyError in Python: causes and fixes.

If your code depends on checking for a key before removing or reading it, see how to check if a key exists in a dictionary in Python.

FAQ #

What does popitem() return? #

It returns one key-value pair as a tuple, like ('name', 'Alice').

Why is this a KeyError? #

Because popitem() tries to remove a dictionary key, but there is no key to remove.

How do I check if a dictionary is empty? #

Use if my_dict:. An empty dictionary is False.

Should I use try-except or an if check? #

For beginners, an if check is usually simpler and easier to read.

See also #

To prevent this error next time, learn how dictionaries work and use popitem() only when you know the dictionary still has items.

Press Esc to close