Consider the following minimal example where a
TypeError: 'bool' object is not subscriptable occurs:
boo = True boo # or: boo[3:6]
This yields the following output:
Traceback (most recent call last): File "C:\Users\xcent\Desktop\code.py", line 2, in <module> boo TypeError: 'bool' object is not subscriptable
Python raises the
TypeError: 'bool' object is not subscriptable if you use indexing or slicing with the square bracket notation on a Boolean variable. However, the Boolean type is not indexable and you cannot slice it—it’s not iterable!
In other words, the Boolean class doesn’t define the
boo = True boo # Error! boo[3:6] # Error! boo[-1] # Error! boo[:] # Error!
You can fix this error by
- converting the Boolean to a string using the
str()function because strings are subscriptable,
- removing the indexing or slicing call,
- defining a dummy
__getitem__()method for a custom “Boolean wrapper class”.
Method 1: Convert Boolean to a String
If you want to access individual characters of the “Boolean” strings
"False", consider converting the Boolean to a string using the
str() built-in function. A string is subscriptable so the error will not occur when trying to index or slice the converted string.
boo = True boo_string = str(boo) print(boo_string) # T print(boo_string[1:-1]) # ru
Method 2: Put Boolean Into List
A simple way to resolve this error is to put the Boolean into a list that is subscriptable—that is you can use indexing or slicing on lists that define the
__getitem__() magic method.
bools = [True, True, True, False, False, False, True, False] print(bools[-1]) # False print(bools[3:-3]) # [False, False]
Method 3: Define the __getitem__() Magic Method
You can also define your own wrapper type around the Boolean variable that defines a dunder method for
__getitem__() so that every indexing or slicing operation returns a specified value as defined in the dunder method.
class MyBool: def __init__(self, boo): self.boo = boo def __getitem__(self, index): return self.boo my_boolean = MyBool(True) print(my_boolean) # True print(my_boolean[:-1]) # True
This hack is generally not recommended, I included it just for comprehensibility and to teach you something new. 😉
The error message “
TypeError: 'boolean' object is not subscriptable” happens if you access a boolean
boo like a list such as
boo[1:4]. To solve this error, avoid using slicing or indexing on a Boolean or use a subscriptable object such as lists or strings.
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.