Do you encounter this stupid error?

You’re not alone—thousands of coders like you generate this error in thousands of projects every single month. This short tutorial will show you exactly why this error occurs, how to fix it, and how to never make the same mistake again. So, let’s get started!
Python throws the TypeError object is not subscriptable
if you use indexing with the square bracket notation on an object that is not indexable. This is the case if the object doesn’t define the __getitem__()
method. You can fix it by removing the indexing call or defining the __getitem__
method.
The following code snippet shows the minimal example that leads to the error:
variable = None print(variable[0]) # TypeError: 'NoneType' object is not subscriptable
You set the variable
to the value None
. The value None
is not a container object, it doesn’t contain other objects. So, the code really doesn’t make any sense—which result do you expect from the indexing operation?
Exercise: Before I show you how to fix it, try to resolve the error yourself in the following interactive shell:
If you struggle with indexing in Python, have a look at the following articles on the Finxter blog—especially the third!
Related Articles:
- Indexing in Python
- Slicing in Python
- Highly Recommended: Accessing the Index of Iterables in Python
Note that a similar problem arises if you set the variable to the integer value 42
instead of the None
value. The only difference is that the error message now is "TypeError: 'int' object is not subscriptable"
.

You can fix the non-subscriptable TypeError by wrapping the non-indexable values into a container data type such as a list in Python:
variable = [None] print(variable[0]) # None
The output now is the value None
and the script doesn’t throw an error anymore.
An alternative is to define the __getitem__
method in your code:
class X: def __getitem__(self, i): return f"Value {i}" variable = X() print(variable[0]) # Value 0
You overwrite the __getitem__
method that takes one (index) argument i
(in addition to the obligatory self
argument) and returns the i
-th value of the “container”. In our case, we just return a string "Value 0"
for the element variable[0]
and "Value 10"
for the element variable[10]
. It doesn’t make a lot of sense here but is the minimal example that shows how it works.
I hope you’d be able to fix the bug in your code! Before you go, check out our free Python cheat sheets that’ll teach you the basics in Python in minimal time:
Related TypeError Messages
๐ This was a very generic tutorial. You may have encountered a similar but slightly different variant of this error message. Have a look at the following tutorials to find out more about those!
- [Fixed] Matplotlib: TypeError: โAxesSubplotโ object is not subscriptable
- [Fixed] TypeError: ‘int’ object is not subscriptable
- [Fixed] Python TypeError: โfloatโ object is not subscriptable
- [Fixed] Python TypeError โsetโ object is not subscriptable
- [Fixed] Python TypeError โboolโ object is not subscriptable
- (Solved) Python TypeError โMethodโ Object is Not Subscriptable
- TypeError Built-in Function or Method Not Subscriptable (Fixed)
Programming Humor – Python


While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.