- IndexError: string index out of range
- Exception
- Root cause
- Forward index of the string
- Backward index of the string
- Solution 1
- Program
- Output
- Solution
- Output
- Solution 2
- Program
- Output
- Solution
- Output
- Solution 3
- Exception
- Solution
- Output
- Python string index out range
- # IndexError: string index out of range in Python
- # Getting the last character of the string
- # Getting the length of a string
- # Using a try/except statement to handle the IndexError
- # Accessing an empty string at any index causes the error
- # You won't get an error when using string slicing
- # Use a try/except statement if taking the index from user input
- How to Fix IndexError: string index out of range in Python
- What Causes IndexError: string index out of range
- Python IndexError: string index out of range Example
- How to Handle IndexError: string index out of range in Python
- Track, Analyze and Manage Errors With Rollbar
IndexError: string index out of range
The python error IndexError: string index out of range occurs if a character is not available at the string index. The string index value is out of range of the String length. The python error IndexError: string index out of range occurs when a character is retrieved from the out side index of the string range.
The IndexError: string index out of range error occurs when attempting to access a character using the index outside the string index range. To identify a character in the string, the string index is used. This error happens when access is outside of the string’s index range.
If the character is retrieved by an index that is outside the range of the string index value, the python interpreter can not locate the location of the memory. The string index starts from 0 to the total number of characters in the string. If the index is out of range, It throws the error IndexError: string index out of range.
A string is a sequence of characters. The characters are retrieved by the index. The index is a location identifier for the ordered memory location where character is stored. A string index starts from 0 to the total number of characters in the string.
Exception
The IndexError: string index out of range error will appear as in the stack trace below. Stack trace shows the line the error has occurred at.
Traceback (most recent call last): File "/Users/python/Desktop/test.py", line 2, in print ("the value is ", x[6]) IndexError: string index out of range [Finished in 0.1s with exit code 1]
Root cause
The character in the string is retrieved via the character index. If the index is outside the range of the string index the python interpreter can’t find the character from the location of the memory. Thus it throws an error on the index. The string index starts from 0 and ends with the character number in the string.
Forward index of the string
Python allows two forms of indexing, forward indexing and backward indexing. The forward index begins at 0 and terminates with the number of characters in the string. The forward index is used to iterate a character in the forward direction. The character in the string will be written in the same index order.
Index | 0 | 1 | 2 | 3 | 4 |
Value | a | b | c | d | e |
Backward index of the string
Python allows backward indexing. The reverse index starts from-1 and ends with the negative value of the number of characters in the string. The backward index is used to iterate the characters in the opposite direction. In the reverse sequence of the index, the character in the string is printed. The back index is as shown below
Index | -5 | -4 | -3 | -2 | -1 |
Value | a | b | c | d | e |
Solution 1
The index value should be within the range of String. If the index value is out side the string index range, the index error will be thrown. Make sure that the index range is with in the index range of the string.
The string index range starts with 0 and ends with the number of characters in the string. The reverse string index starts with -1 and ends with negative value of number of characters in the string.
In the example below, the string contains 5 characters “hello”. The index value starts at 0 and ends at 4. The reverse index starts at -1 and ends at -5.
Program
x = "hello" print "the value is ", x[5]
Output
Traceback (most recent call last): File "/Users/python/Desktop/test.py", line 2, in print "the value is ", x[5] IndexError: string index out of range [Finished in 0.0s with exit code 1]
Solution
x = "hello" print "the value is ", x[4]
Output
the value is o [Finished in 0.1s]
Solution 2
If the string is created dynamically, the string length is unknown. The string is iterated and the characters are retrieved based on the index. In this case , the value of the index is unpredictable. If an index is used to retrieve the character in the string, the index value should be validated with the length of the string.
The len() function in the string returns the total length of the string. The value of the index should be less than the total length of the string. The error IndexError: string index out of range will be thrown if the index value exceeds the number of characters in the string
Program
x = "hello" index = 5 print "the value is ", x[index]
Output
Traceback (most recent call last): File "/Users/python/Desktop/test.py", line 3, in print "the value is ", x[index] IndexError: string index out of range [Finished in 0.1s with exit code 1]
Solution
x = "hello" index = 4 if index < len(x) : print "the value is ", x[index]
Output
the value is o [Finished in 0.1s]
Solution 3
Alternatively, the IndexError: string index out of range error is handled using exception handling. The try block is used to handle if there is an index out of range error.
x = "hello" print "the value is ", x[5]
Exception
the value is Traceback (most recent call last): File "/Users/python/Desktop/test.py", line 2, in print "the value is ", x[5] IndexError: string index out of range [Finished in 0.1s with exit code 1]
Solution
try: x = "hello" print "the value is ", x[5] except: print "not available"
Output
the value is not available [Finished in 0.1s]
Python string index out range
Last updated: Feb 16, 2023
Reading time · 4 min
# IndexError: string index out of range in Python
The Python "IndexError: string index out of range" occurs when we try to access an index that doesn't exist in a string.
Indexes are zero-based in Python, so the index of the first character in the string is 0 , and the index of the last is -1 or len(my_str) - 1 .
Here is an example of how the error occurs.
Copied!my_str = 'hello' # ⛔️ IndexError: string index out of range result = my_str[100]
The string hello has a length of 5 . Since indexes in Python are zero-based, the first index in the string is 0 , and the last is 4 .
# Getting the last character of the string
If you need to get the last character of a string, use an index of -1 .
Copied!my_str = 'hello' result = my_str[-1] print(result) # 👉️ o print(my_str[-2]) # 👉️ l
When the index starts with a minus, we count backward from the end of the string.
# Getting the length of a string
If you need to get the length of the string, use the len() function.
Copied!my_str = 'hello' print(len(my_str)) # 👉️ 5
The len() function returns the length (the number of items) of an object.
The argument the function takes may be a sequence (a string, tuple, list, range or bytes) or a collection (a dictionary, set, or frozen set).
If you need to check if an index exists before accessing it, use an if statement.
Copied!my_str = 'hello' idx = 5 # ✅ checking if an index exists before accessing it if len(my_str) > idx: print(my_str[idx]) else: # 👇️ this runs print(f'index idx> is out of range')
This means that you can check if the string's length is greater than the index you are trying to access.
# Using a try/except statement to handle the IndexError
Alternatively, you can handle the error by using a try/except statement.
Copied!my_str = 'hello' try: result = my_str[100] print(result) except IndexError: print('index out of range') # handle error here
We tried accessing the character at index 100 of the string which raised an IndexError exception.
You can handle the error or use the pass keyword in the except block.
Copied!my_str = 'hello' try: result = my_str[100] print(result) except IndexError: pass
The pass statement does nothing and is used when a statement is required syntactically but the program requires no action.
# Accessing an empty string at any index causes the error
If you try to access an empty string at a specific index, you'd always get an IndexError .
Copied!my_str = '' print(my_str) # 👉️ "" print(len(my_str)) # 👉️ 0 # ⛔️ IndexError: string index out of range print(my_str[0])
Accessing an empty string at any index raises the error.
You should print the string you are trying to access and its length to make sure the variable stores what you expect.
# You won't get an error when using string slicing
Note that if you use string slicing, you don't get an error if the starting index is out of range.
Copied!my_str = 'hello' print(my_str[100:]) # 👉️ "" print(my_str[2:]) # 👉️ "llo"
The first example returns an empty string and doesn't cause an error.
The syntax for string slicing is my_str[start:stop:step] .
If you don't specify a value for the stop index, you'd get a substring that contains the characters until the end of the original string.
If you only need a single character, specify a stop index.
Copied!my_str = 'hello' print(my_str[100:101]) # 👉️ "" print(my_str[2:3]) # 👉️ "l"
Notice that the start index is inclusive, whereas the stop index is exclusive.
In the second example, we start at index 2 , get the character at index 2 and stop.
This approach is useful if you would rather get an empty string than have to handle an IndexError if the index you are trying to access is out of range.
# Use a try/except statement if taking the index from user input
If you are taking the index from user input, use a try/except statement to handle the error if the user enters an index that is out of range.
Copied!my_str = 'hello' index = int(input('Enter an index: ')) try: value = my_str[index] print(f'✅ The character is: value>') except IndexError: print('⛔️ The specified index does NOT exist')
The string in the example has 5 characters, therefore its last index is 4 because indices are zero-based.
If the user enters an index that exists in the string, the character at the specified index gets printed.
If the user enters an index that is greater than 4, an IndexError exception is raised and the except block runs.
I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
How to Fix IndexError: string index out of range in Python
The Python IndexError: string index out of range error occurs when an index is attempted to be accessed in a string that is outside its range.
What Causes IndexError: string index out of range
This error occurs when an attempt is made to access a character in a string at an index that does not exist in the string. The range of a string in Python is [0, len(str) - 1] , where len(str) is the length of the string. When an attempt is made to access an item at an index outside this range, an IndexError: string index out of range error is thrown.
Python IndexError: string index out of range Example
Here’s an example of a Python IndexError: string index out of range thrown when trying to access a character outside the index range of a string:
my_string = "hello" print(my_string[5])
In the above example, since the string my_string contains 5 characters, its last index is 4. Trying to access a character at index 5 throws an IndexError: string index out of range :
Traceback (most recent call last): File "test.py", line 2, in print(my_string[5]) ~~~~~~~~~^^^ IndexError: string index out of range
How to Handle IndexError: string index out of range in Python
The Python IndexError: string index out of range can be fixed by making sure any characters accessed in a string are within the range of the string. This can be done by checking the length of the string before accessing an index. The len() function can be used to get the length of the string, which can be compared with the index before it is accessed.
If the index cannot be known to be valid before it is accessed, a try-except block can be used to catch and handle the error:
my_string = "hello" try: print(my_string[5]) except IndexError: print("Index out of range")
In this example, the try block attempts to access the 5th index of the string, and if an IndexError occurs, it is caught by the except block, producing the following output:
Track, Analyze and Manage Errors With Rollbar
Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Python errors easier than ever. Try it today!