How to Fix: TypeError: ‘NoneType’ object is not iterable

3D illustration of a mechanical arm trying to grab items from a ghostly, non-existent conveyor belt, representing the NoneType not iterable error.

This error is simple: you tried to use a for loop on a variable, but that variable was None. In Python, this will raise a TypeError NoneType not iterable message.

Iterable” just means “something you can loop over” (like a List, Tuple, or String). None is not on that list.

The Cause

This almost always happens when you try to loop over the result of a function that failed silently by returning None.

Problem Code:

def get_user_list(group_id):
    if group_id == 1:
        return ["Alice", "Bob"]
    else:
        # Whoops, we forgot to return an empty list!
        return None 

# This works
group_1_users = get_user_list(1)
for user in group_1_users:
    print(user)

# This crashes
group_2_users = get_user_list(2) # group_2_users is now None
for user in group_2_users:
    print(user)
# CRASH! TypeError: 'NoneType' object is not iterable

The Fix: Always Return a Default Iterable

The best fix is to make your function “safer.” Instead of returning None, return an empty list [].

Corrected Function:

def get_user_list(group_id):
    if group_id == 1:
        return ["Alice", "Bob"]
    else:
        # THE FIX: Return an empty list, which is iterable
        return []

Now, when you call get_user_list(2), the for loop will just run zero times, and your program will not crash.

Quick Fix (If you can’t change the function): You can also check for None before you loop.

group_2_users = get_user_list(2)
if group_2_users is not None:
    for user in group_2_users:
        print(user)

Similar Posts

Leave a Reply