Posted by Marta on May 2, 2021 Viewed 15923 times
In this article, I will explain the main reason why you will face the TypeError: string indices must be integers error in Python along with a few different examples. I think it is essential to understand why this error occurs, since the better you understand the error, the better your ability to avoid it.
This tutorial contains some code examples and possible ways to fix the error.
A String in Python is a sequence of characters. Each of this character can be accessed using its index position. Using anything else but an integer to index a string will raise a String Indices must be Integers error . For example:
variable1 = "Hello Code Club" print(variable1[0]) #Correct print(variable1['Hello'] # ERROR
Output:
H Traceback (most recent call last): File line 5, in <module> print(variable1['Hello']) # Error TypeError: string indices must be integers
Check out line 5. A String should be indexed using an integer, but instead, the code in line 5 is indexing using not an integer but a string. Python doesn’t know how to execute this statement, and therefore it throws an error because it can continue with the execution.
In most cases you will face this problem because you assume that a given variable is a dictionary, but it is a String.
This error is very common because Python is not a strongly type language, in other words, variables don’t have a fixed type associated to them.
This error looks straightforward; however, when we are working with dictionaries, it might not be as obvious. Let’s see a code snippet that will raise our error:
variable1 = { 'name': "Luke", 'age': 347 } for item in variable1: print(item['name'])
Output:
Traceback (most recent call last): File line 7, in <module> print(item['name']) TypeError: string indices must be integers
This code snippet aims to print out all values inside the dictionary. Why is it raising an error? The item variable in line 7 is a String, not a dictionary.
To understand this, it is essential to point out when using a dictionary in a for loop, by default, the code will loop over the dictionary keys, not over the values. See the example below:
variable1 = { 'name': "Luke", 'age': 347 } for item in variable1: print(item)
Output:
name age
To loop over the values, we need to called the method .values()
:
variable1 = { 'name': "Luke", 'age': 347} for item in variable1.values(): print(item)
Output:
Luke 347
Another example where the “TypeError: string indices must be integers” error occur is when working with JSON. Let’s imagine that we have a file containing employees information, all saved in JSON format in a file. And we want to write a piece of code that returns the numbers of employees over 30. See below the code snippet:
employees.json
{"employees": [ { "name": "Luke", "age": 21}, { "name": "Marta", "age": 32}, { "name": "Mike", "age": 45}, { "name": "Jane", "age": 22} ] }
import json f=open('employees.json') data = json.load(f) f.close() employee_above_30s = 0 for employee in data: if employee["age"]>30: employee_above_30s+=1 print(employee_above_30s)
After running the above code, we get an error. Why? The problem is in line 9. We are assuming the employee variable is a dictionary but it’s actually a string that contains the value “employees”, which is .
Therefore the solution is avoiding trying to access a field on a String, and use the dictionary instead. The easiest way to fix the above code snippet is replacing line 8 by for employee in data['employees']
, as below:
employee_above_30s = 0 for employee in data['employees']: if employee["age"]>30: employee_above_30s+=1
The employee is now a dictionary instead of a String.
Here is a chance to check how much you learned. See below a few quiz questions that will help you to confirm and reinforce your understanding. Find the solutions at the bottom of this article:
variable = "Hello" print(variable["1"])
A) H
B) e
C) string indices must be integers error
To summarise, we have seen a few scenarios where you could face the “TypeError: string indices must be integers” error and how you can fix it by making sure you only use string indices on dictionaries.
I hope you enjoy this article, and understand this issue better to avoid it when you are programming.
Thank you so much for reading and supporting this blog!
Happy Coding!
1.C
Steady pace book with lots of worked examples. Starting with the basics, and moving to projects, data visualisation, and web applications
Unique lay-out and teaching programming style helping new concepts stick in your memory
Great guide for those who want to improve their skills when writing python code. Easy to understand. Many practical examples
Perfect Boook for anyone who has an alright knowledge of Java and wants to take it to the next level.
Excellent read for anyone who already know how to program and want to learn Best Practices
Perfect book for anyone transitioning into the mid/mid-senior developer level
Great book and probably the best way to practice for interview. Some really good information on how to perform an interview. Code Example in Java