Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] Python TypeError: NoneType is Not Subscriptable (Fix This Stupid Bug)
1
Python TypeError: NoneType is Not Subscriptable (Fix This Stupid Bug)

5/5 – (1 vote)

Do you encounter the following error message?

Code:
TypeError: NoneType is not subscriptable

You’re not alone! This short tutorial will show you why this error occurs, how to fix it, and how to never make the same mistake again.

So, let’s get started!

Summary

Python raises the
Code:
TypeError: NoneType is not subscriptable
if you try to index
Code:
x[i]
or slice
Code:
x[i:j]
a
Code:
None
value. The
Code:
None
type is not indexable, i.e., it doesn’t define the
Code:
__getitem__()
method. You can fix it by removing the indexing or slicing call, or defining the
Code:
__getitem__
method.

Example

[Image: image-20.png]

The following minimal example that leads to the error:

Code:
x = None print(x[0]) # TypeError: 'NoneType' object is not subscriptable

You set the
Code:
variable
to the value
Code:
None
. The value
Code:
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:

https://trinket.io/embed/python/e55b915062

If you struggle with indexing in Python, have a look at the following articles on the Finxter blog—especially the third!

[Image: 1f30d.png] Related Articles:

Fixes

You can fix the non-subscriptable TypeError by wrapping the non-indexable values into a container data type such as a listin Python:

Code:
x = [None] print(x[0]) # None

The output now is the value
Code:
None
and the script doesn’t yield an error message anymore.

An alternative is to define the
Code:
__getitem__()
method in your code:

Code:
class X: def __getitem__(self, i): return f"Value {i}" variable = X() print(variable[0]) # Value 0

[Image: 1f30d.png] Related Tutorial: Python
Code:
__getitem__()
magic method


You overwrite the
Code:
__getitem__
method that takes one (index) argument
Code:
i
(in addition to the obligatory
Code:
self
argument) and returns the
Code:
i
-th value of the “container”.

In our case, we just return a string
Code:
"Value 0"
for the element
Code:
variable[0]
and
Code:
"Value 10"
for the element
Code:
variable[10]
.

[Image: 1f30d.png] Full Guide: Python Fixing This Subsctiptable Error (General)

What’s Next?

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:
Reply

Users browsing this thread:
1 Guest(s)


Forum Jump: