TypeError: string indices must be integers

An Iterable is a collection of elements that can be accessed sequentially . In Python, iterable objects are indexed using numbers . When you try to access an iterable object using a string or a float as the index, an error will be returned.

>>> str = "hello world!" >>> str['hello'] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: string indices must be integers
>>> str[2.1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: string indices must be integers

All the characters of a string have a unique index . This index specifies the position of each character of the string. TypeError: string indices must be integers means an attempt to access a location within a string using an index that is not an integer. In the above case using the str[hello"] and str[2.1] as indexes. As these are not integers, a TypeError exception is raised. This means that when you're accessing an iterable object like a string or float value, you must do it using an integer value .

>>> str = "hello world!" >>> str[4] 'o'

In the above example, instead of providing str[hello"] or str[2.1] to the string, provided an integer value str[4]. Thus no error is encountered. Since string indices only accept integer value.


how to solve TypeError: string indices must be integers

Dictionary example

cars = { "brand": "Ford", "model": "Mustang", } for i in cars: print("brand: " + i["brand"]) print("model: " + i["model"])

When you run the above code, you will get the output like:

Traceback (most recent call last): File "sample.py", line 9, in <module> print("brand: " + i["brand"]) TypeError: string indices must be integers

Here, TypeError: string indices must be integers has been caused because you are trying to access values from dictionary using string indices instead of integer.

If you are accessing items from a dictionary , make sure that you are accessing the dictionary itself and not a key in the dictionary. The value of "i" is always a key in the dictionary . It's not a record in the dictionary. Let's try to using "i" in the dictionary example:

>>> for i in cars: >>> print(i) brand model

python json string dictionary

Slice Notation string[x:y]

Python supports slice notation for any sequential data type like lists, strings , tuples, bytes, bytearrays, and ranges. When working with strings and slice notation, it can happen that a TypeError: string indices must be integers is raised, pointing out that the indices must be integers, even if they obviously are.

>>> str = "Hello World!" >>> str[0,4] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: string indices must be integers

A comma "," is actually enough for Python to evaluate something as a tuple. So here you need to replace the comma "," with a colon ":" to separate the two integers correctly.

>>> str = "Hello World!" >>> str[0:5] 'Hello'