How to check if an object is iterable in Python?

An iterable object is any object that can be iterated through all its elements using a loop or iterable function. Lists, strings, dictionaries, tuples, and sets are all iterable objects in Python.

There are several reliable methods to check if an object is iterable. Let's explore the most effective approaches.

Using try-except with iter()

The most Pythonic way is to use iter() function inside a try-except block. This approach follows the "easier to ask for forgiveness than permission" (EAFP) principle ?

# Check if a list is iterable
data = ["apple", 22, "orange", 34, "abc", 0.3]
try:
    iter(data)
    print("List is iterable")
except TypeError:
    print("List is not iterable")

# Check if an integer is iterable
number = 23454
try:
    iter(number)
    print("Integer is iterable")
except TypeError:
    print("Integer is not iterable")
List is iterable
Integer is not iterable

Using collections.abc.Iterable

The collections.abc module provides the Iterable abstract base class that can be used with isinstance() to check iterability ?

from collections.abc import Iterable

# Check various data types
test_objects = [
    [1, 2, 3],           # list
    "hello",             # string  
    {"a": 1, "b": 2},    # dictionary
    (1, 2, 3),           # tuple
    42                   # integer
]

for obj in test_objects:
    if isinstance(obj, Iterable):
        print(f"{type(obj).__name__} is iterable")
    else:
        print(f"{type(obj).__name__} is not iterable")
list is iterable
str is iterable
dict is iterable
tuple is iterable
int is not iterable

Using hasattr() with __iter__

You can check if an object has the __iter__ method, which indicates it's iterable ?

def is_iterable(obj):
    return hasattr(obj, '__iter__')

# Test with different objects
print(f"List [1,2,3]: {is_iterable([1, 2, 3])}")
print(f"String 'hello': {is_iterable('hello')}")
print(f"Integer 42: {is_iterable(42)}")
print(f"Set {{1,2,3}}: {is_iterable({1, 2, 3})}")
List [1,2,3]: True
String 'hello': True
Integer 42: False
Set {1,2,3}: True

Comparison of Methods

Method Pros Cons Best For
try-except with iter() Pythonic, handles edge cases Slightly slower Production code
isinstance(obj, Iterable) Clean, readable Requires import Type checking
hasattr(obj, '__iter__') Fast, no imports Less reliable Quick checks

Creating a Reusable Function

Here's a robust function that combines the best practices ?

def check_iterable(obj):
    """Check if an object is iterable and demonstrate iteration."""
    try:
        iterator = iter(obj)
        print(f"{type(obj).__name__} is iterable")
        print("First few elements:", end=" ")
        for i, item in enumerate(iterator):
            if i >= 3:  # Show only first 3 elements
                print("...")
                break
            print(item, end=" ")
        print()
    except TypeError:
        print(f"{type(obj).__name__} is not iterable")

# Test the function
test_cases = ["Python", [1, 2, 3, 4, 5], {"a": 1}, 100, range(5)]
for case in test_cases:
    check_iterable(case)
    print()
str is iterable
First few elements: P y t ...

list is iterable
First few elements: 1 2 3 ...

dict is iterable
First few elements: a 

int is not iterable

range is iterable
First few elements: 0 1 2 ...

Conclusion

Use try-except with iter() for the most reliable iterable checking in production code. The isinstance(obj, Iterable) approach is excellent for type checking and validation scenarios.

---
Updated on: 2026-03-27T11:32:57+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements