Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] (Fixed) Python TypeError ‘bool’ object is not subscriptable
1
(Fixed) Python TypeError ‘bool’ object is not subscriptable

5/5 – (1 vote)

[Image: image-11.png]

Problem Formulation

Consider the following minimal example where a
Code:
TypeError: 'bool' object is not subscriptable
occurs:

Code:
boo = True boo[0] # or: boo[3:6]

This yields the following output:

Code:
Traceback (most recent call last): File "C:\Users\xcent\Desktop\code.py", line 2, in <module> boo[0] TypeError: 'bool' object is not subscriptable
Solution Overview

Python raises the
Code:
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
Code:
__getitem__()
method.

Code:
boo = True boo[0] # Error! boo[3:6] # Error! boo[-1] # Error! boo[:] # Error!

You can fix this error by

  1. converting the Boolean to a string using the
    Code:
    str()
    function because strings are subscriptable,

  2. removing the indexing or slicing call,

  3. defining a dummy
    Code:
    __getitem__()
    method for a custom “Boolean wrapper class”.

[Image: 1f30d.png] Related Tutorials: Check out our tutorials on indexing and slicing on the Finxter blog to improve your skills!

Method 1: Convert Boolean to a String

If you want to access individual characters of the “Boolean” strings
Code:
"True"
and
Code:
"False"
, consider converting the Boolean to a string using the
Code:
str()
built-in function. A string is subscriptable so the error will not occur when trying to index or slice the converted string.

Code:
boo = True boo_string = str(boo) print(boo_string[0]) # 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
Code:
__getitem__()
magic method.

Code:
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
Code:
__getitem__()
so that every indexing or slicing operation returns a specified value as defined in the dunder method.

Code:
class MyBool: def __init__(self, boo): self.boo = boo def __getitem__(self, index): return self.boo my_boolean = MyBool(True) print(my_boolean[0]) # True print(my_boolean[:-1]) # True

This hack is generally not recommended, I included it just for comprehensibility and to teach you something new. [Image: 1f609.png]

Summary

The error message “
Code:
TypeError: 'boolean' object is not subscriptable
” happens if you access a boolean
Code:
boo
like a list such as
Code:
boo[0]
or
Code:
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.
Reply

Users browsing this thread:
1 Guest(s)


Forum Jump: