In Python, AttributeError: ‘List’ Object Has No Attribute ‘Len’ means you used list.len; switch to len(list) or define __len__ on custom objects.
Seeing AttributeError: 'List' Object Has No Attribute 'Len' tells you Python looked for an attribute named len on a real list and didn’t find it. Lists don’t ship with a .len attribute; length is exposed through the built-in len() function, which calls a type’s length hook under the hood. That design applies to many container types in Python, not just lists.
What This Error Means In Plain Terms
Python raises AttributeError when attribute access fails. When you write my_list.len or my_list.length, you’re asking the list object for an attribute that doesn’t exist, so the interpreter stops and throws the exception. The message text mirrors exactly what went wrong: list has no attribute named len.
Correct Way To Get Length
Use len() — always. Python exposes size via a single function: len(object). For built-ins like lists, tuples, strings, dicts, sets, and many array-like libraries, len() returns a plain integer count. No dot call is needed.
items = [10, 20, 30]
count = len(items) # 3
That one call is the standard path and maps to a data-model hook named __len__, which core types implement in C.
AttributeError: ‘List’ Object Has No Attribute ‘Len’ — Root Causes And Fixes
Most sightings come from habits carried over from other languages or from typos. Work through these quick checks.
- Replace dot calls with
len(). If your code readsdata.lenordata.len(), switch tolen(data). - Drop
.lengthpatterns. JS, Java, and C# uselengthon arrays/strings; Python does not. Uselen(seq). - Mind case. The keyword is all lower-case:
len. Title-case strings in an error message often come from copy/paste; the interpreter only understandslen(). - Avoid shadowing. If you wrote
len = 5earlier, thenlen(items)won’t work. Pick another variable name to restore access to the built-in. - Check object type. If
dataisn’t a list (say, an integer),len(data)can raise a different error. Only sequences/collections implement length. - Custom types need
__len__. If you wrote a class that should have a size, adddef __len__(self):and return an int; thenlen(obj)will work.
Quick Checks
- Scan for
.lenand.length. Replace withlen(x). - Confirm type fast. Use
type(x)orisinstance(x, list)before guessing. - Restore the built-in. If you re-bound
len, delete the name or restart the shell.
Fix ‘list’ Object Has No Attribute ‘len’ Error — Close Variations That Trigger It
Different spellings lead to the same stop sign. Each fix lands on the same rule: call the built-in.
obj.lenorobj.len(). Switch tolen(obj).obj.length. Switch tolen(obj).list.len(items). Lists have no such method; keeplen(items).
Code Patterns That Cause The Error (And The Right Form)
Length With A Loop
# Wrong
for i in range(0, items.len):
...
# Right
for i in range(len(items)):
...
Python also lets you iterate the list directly if you don’t need indexes.
Length Check Before Work
# Wrong
if my_list.len > 0:
process(my_list)
# Right (explicit length)
if len(my_list) > 0:
process(my_list)
# Right (Pythonic truthiness)
if my_list:
process(my_list)
if my_list: reads clean and runs fast because containers carry a truth value that maps to empty/non-empty.
Length On Custom Objects
class Bucket:
def __init__(self, items):
self._items = list(items)
def __len__(self):
return len(self._items)
b = Bucket([1, 2, 3])
size = len(b) # 3
The len() call routes to Bucket.__len__ through the data model.
Why Python Uses len(x) Instead Of x.len()
Python favors a single function for length across built-ins and user types. The interpreter consults the object’s __len__ slot, which core containers implement in C for speed. That keeps the surface area compact and enables uniform behavior.
Related Errors You Might See Next
AttributeError: 'list' object has no attribute 'length'. Same cause; uselen(list_obj).TypeError: object of type 'int' has no len(). You calledlen()on a non-container; check the type you’re measuring.NameError: name 'len' is not defined. You shadowed or deleted the built-in; rename your variable or restart.
Quick Reference Table
| Symptom | Likely Cause | Fix |
|---|---|---|
AttributeError: 'List' Object Has No Attribute 'Len' |
Using .len instead of len() |
Call len(obj) on the sequence |
AttributeError: 'list' object has no attribute 'length' |
JS/Java habit | Replace with len(obj) |
TypeError: object of type 'int' has no len() |
Non-container target | Check type; pass a sequence or mapping |
NameError: name 'len' is not defined |
Shadowed built-in | Rename your variable; restore len |
This table maps common symptoms to small edits you can apply right away. The fixes lean on official behavior of the len() built-in and the exception model.
Deeper Notes For Curious Readers
What len() Calls Under The Hood
Hook:len(x) checks for x.__len__() per the data model. Built-in containers implement it natively; custom classes can add it to participate.
Where To Find The Official List API
The tutorial page lists all list methods — append, extend, insert, remove, pop, clear, index, count, sort, reverse, copy — and none is named len. That omission is deliberate since size lives in the global function.
Speed Notes
The built-in is constant-time on core containers and returns a plain integer. Treat it as free for practical purposes inside normal loops.
Make This Error Go Away—A Short Checklist
- Search for dot-length calls. Swap to
len(x). - Scan variable names. Avoid
len = ...in your scope. - Confirm the target is a sequence. If you see a type error, trace the variable back to its source.
- Add
__len__on your class when needed. Return anint, keep it non-negative.
Why You Might See Mixed Casing In The Message
Many developers paste the phrase as AttributeError: 'List' Object Has No Attribute 'Len' in posts and tickets. The interpreter actually prints all lower-case type and attribute names for this one. The fix stays the same: call len(list_obj).
Sources Worth Bookmarking
- Built-in
len()reference. Complete entry with behavior rules and signature. - Built-in exceptions. Official description of
AttributeErrorand friends. - List tutorial page. Canonical list methods; a quick scan avoids typos like
.len. - Data model. Where
__len__is defined and how the interpreter uses it. - Hands-on guides. Extra reading on
len()patterns and mistakes.
Final Pass Before You Ship
- Search: find
.lenand.lengthacross the repo. - Tests: add one unit test that asserts
len()on each public container returns the expected count. - Docs: when writing examples, stick to
len()to keep learners on the right path.
Fixing AttributeError: 'List' Object Has No Attribute 'Len' usually takes one edit. Swap to len(list_obj), keep your built-in unshadowed, and teach custom classes to report size through __len__. With that, this error won’t return.
