IndexError: list index out of range
This error matches known, documented patterns with reliable solutions.
Quick Fix (Most Common Solution)
- Check list length before accessing
- Use try/except for safe access
Seeing "IndexError: list index out of range"? This error can be frustrating, but it's usually fixable. It typically affects your development workflow or system. Below you'll find clear, step-by-step solutions to resolve this issue.
What This Error Means
You tried to access a list element at an index that does not exist.
Frequently documented in developer and vendor support forums.
Not affiliated with browser, OS, or device manufacturers.
New here? Learn why exact error messages matter →
Common Causes
- Index larger than list length
- Empty list access
- Off-by-one error
How to Fix
- Check list length before accessing
- Use try/except for safe access
- Use negative indexing for end elements
Last reviewed: March 2026 How we review solutions
Why This Happens
Python raises IndexError when code attempts to read or write a list position that does not exist. Lists in Python are zero-indexed, so a list with five elements has valid indices 0 through 4. Requesting index 5—or any number beyond the current length—triggers this exception immediately rather than returning a default value. The interpreter does this deliberately: silent out-of-bounds access would hide bugs and lead to corrupted data downstream. Off-by-one mistakes are the most frequent trigger, especially inside loops that use range(len(items)) and then reference items[i+1] without adjusting the upper bound. Empty lists are another common source: code that assumes at least one element will crash on the first access if the data source returned nothing. Functions that pop or delete elements mid-iteration shrink the list while the loop counter keeps advancing, eventually overshooting the reduced length. Understanding that Python enforces strict bounds—and that negative indices wrap from the end—is the key to preventing this error in everyday code.
Quick Diagnostic Checklist
- Print the list length with len(my_list) right before the failing line
- Print the index value you are trying to access
- Check whether the list could be empty at that point in the code
- Look for off-by-one errors in range() or while-loop conditions
- Search for any .pop() or del calls that shrink the list during iteration
Common IndexError scenario with inline walkthrough
# Suppose we receive user data from an API
users = [] # <-- API returned an empty list
# BUG: accessing index 0 on an empty list
# This line raises IndexError: list index out of range
first_user = users[0]
# --- FIX 1: Guard with a length check ---
if len(users) > 0:
first_user = users[0]
else:
first_user = None # handle the empty case explicitly
# --- FIX 2: Use a try/except block ---
try:
first_user = users[0]
except IndexError:
first_user = None # safe fallback
# --- FIX 3: Slice instead of index (returns empty list, never raises) ---
first_batch = users[:1] # [] if empty, [users[0]] if not
Edge Cases & Unusual Scenarios
Multi-threaded list access
If one thread appends to a list while another reads by index, the reader can overshoot the length between the len() check and the actual access. Use threading.Lock or queue.Queue for safe concurrent access.
Pandas DataFrame .iloc after filtering
After filtering rows, the DataFrame index is no longer contiguous. Using .iloc[n] is safe, but .loc[n] may raise KeyError if row n was filtered out. Reset the index with df.reset_index(drop=True) before positional access.
Nested list with ragged rows
A list of lists where inner lists have different lengths (e.g., CSV data with missing columns) will raise IndexError when accessing a column index that only some rows have. Validate row lengths or use itertools.zip_longest.
Optional follow-up
Some users ask whether saving fixes for recurring errors would be useful when the same issue appears again.
Was this explanation helpful?
Frequently Asked Questions
How do I get list length?
Use len(list) to get the number of elements.
What is negative indexing?
list[-1] gets last element, list[-2] gets second-to-last.
Can IndexError occur with dictionaries?
No. Dictionaries raise KeyError, not IndexError. IndexError is specific to sequences like lists, tuples, and strings that use integer indices.
Does try/except around IndexError hurt performance?
In Python, try/except is very cheap when no exception is raised. It only adds overhead when the exception actually fires. For code where the index is usually valid, try/except is often faster than an explicit length check.
How do I safely access the last element of a list?
Use my_list[-1] to get the last element. This still raises IndexError on an empty list, so combine it with a length check: my_list[-1] if my_list else default_value.
Related Resources
Also Known As
- Python exception
- Python traceback
- Python runtime error
- Python crash
Common Search Variations
- "python error fix"
- "python script not working"
- "python traceback what does it mean"
- "how to fix python exception"
- "python crash on startup"
- "python import error solution"
Related Errors
Still Stuck?
Paste a different error message or upload a screenshot to get help instantly.