TypeError: 'str' object cannot be interpreted as an integer (Fix)
Fix the Python error TypeError: 'str' object cannot be interpreted as an integer. This page explains what the error means, common causes, and the fastest ways to correct your code.
Quick fix
text = "5"
number = int(text)
for i in range(number):
print(i)
This error happens when Python expects an integer, but you give it a string instead. Convert the string first if it contains a number.
What this error means
Python is telling you that:
- It expected an integer
- It received a string
- It cannot use that string where a whole number is required
This often appears when working with:
range()- list indexes or slices
- repetition operations
- functions that require integer arguments
Why this error happens
This error usually happens because a value looks like a number, but is actually text.
Common reasons:
input()always returns a string- Numbers read from files or APIs may arrive as strings
- Quotes around a number make it a string, not an integer
- A variable may contain text when you think it contains a number
For example:
count = "5" # string
print(type(count))
Output:
<class 'str'>
Even though "5" looks numeric, Python treats it as text.
Common places where it appears
You will often see this error in code like this:
range("5")instead ofrange(5)- using a string as a list index
- passing a string to a function that needs an integer
- using user input directly in a loop
Example:
items = ["a", "b", "c"]
index = "1"
print(items[index])
This fails because list indexes must be integers, not strings.
Example that causes the error
A very common case is using input() directly inside range().
count = input("How many times? ")
for i in range(count):
print(i)
Python raises the error because count is a string.
If the user types 5, the value is still "5", not 5.
How to fix it
The usual fix is to convert the string with int() before using it.
count = int(input("How many times? "))
for i in range(count):
print(i)
Output if the user enters 5:
0
1
2
3
4
Another example
text = "10"
number = int(text)
print(number + 2)
Output:
12
Good things to check
- Convert the value with
int() - Check the type with
type() - Make sure the string contains a valid whole number
- Validate input before conversion
If you need more help with conversion, see how to convert a string to int in Python.
If int() also fails
Sometimes you fix one problem and get a new one:
text = "3.5"
number = int(text)
This raises a ValueError, because "3.5" is not a valid integer string.
Other examples that fail with int():
"3.5""ten"""
If decimals are allowed, use float() instead. If not, clean and validate the input first.
Related page: ValueError: invalid literal for int() with base 10
Debugging steps
If you are not sure where the problem is coming from, check the value before the line that fails.
Useful debugging commands:
print(value)
print(type(value))
print(repr(value))
print(isinstance(value, int))
What each one helps you see
print(value)shows the current valueprint(type(value))shows whether it is a string or integerprint(repr(value))helps reveal spaces or hidden charactersisinstance(value, int)checks whether the value is an integer
Example debugging session
value = input("Enter a number: ")
print(value)
print(type(value))
print(repr(value))
print(isinstance(value, int))
for i in range(value):
print(i)
If the user enters 5, the debug output will show that the value is still a string.
Common mistakes
These are some of the most common causes of this error:
- Using
input()directly insiderange() - Storing numbers as quoted strings
- Reading numeric text from a file and not converting it
- Passing a string index to a list or tuple operation
- Using command-line arguments without conversion
Also watch for cases where a variable is reassigned:
count = 5
count = "5"
for i in range(count):
print(i)
The second assignment changes count from an integer to a string.
FAQ
Why does input() cause this error so often?
Because input() always returns a string. You usually need int(input(...)) when asking for a whole number.
What is the difference between a string and an integer?
A string is text, even if it looks like a number. An integer is a whole number value Python can use in numeric operations.
Should I use int() or float()?
Use int() for whole numbers like 5. Use float() for decimal numbers like 5.2.
Why does "5" not work the same as 5?
Because "5" is text inside quotes. Python treats it as a string, not a number.
Can I fix this with type checking first?
Yes. You can inspect the value with type() or isinstance() before using it where an integer is required.