I don’t understand what the problem is with the code, it is very simple so this is an easy one.
x = input("Give starting number: ")
y = input("Give ending number: ")
for i in range(x,y):
print(i)
It gives me an error
Traceback (most recent call last):
File "C:/Python33/harj4.py", line 6, in <module>
for i in range(x,y):
TypeError: 'str' object cannot be interpreted as an integer
As an example, if x is 3 and y is 14, I want it to print
Give starting number: 4
Give ending number: 13
4
5
6
7
8
9
10
11
12
13
What is the problem?
Mel
5,67710 gold badges39 silver badges42 bronze badges
asked Oct 7, 2013 at 20:56
0
A simplest fix would be:
x = input("Give starting number: ")
y = input("Give ending number: ")
x = int(x) # parse string into an integer
y = int(y) # parse string into an integer
for i in range(x,y):
print(i)
input
returns you a string (raw_input
in Python 2). int
tries to parse it into an integer. This code will throw an exception if the string doesn’t contain a valid integer string, so you’d probably want to refine it a bit using try
/except
statements.
answered Oct 7, 2013 at 20:57
BartoszKPBartoszKP
34.2k14 gold badges104 silver badges129 bronze badges
You are getting the error because range() only takes int values as parameters.
Try using int() to convert your inputs.
answered Jun 10, 2019 at 11:20
Rahul Rahul
1512 silver badges5 bronze badges
x = int(input("Give starting number: "))
y = int(input("Give ending number: "))
for i in range(x, y):
print(i)
This outputs:
Dadep
2,7965 gold badges26 silver badges40 bronze badges
answered Sep 25, 2018 at 5:27
x = int(input("Give starting number: "))
y = int(input("Give ending number: "))
P.S. Add function int()
answered Dec 7, 2017 at 10:33
I’m guessing you’re running python3, in which input(prompt)
returns a string. Try this.
x=int(input('prompt'))
y=int(input('prompt'))
answered Oct 7, 2013 at 20:58
PerkinsPerkins
2,34924 silver badges21 bronze badges
1
You have to convert input x and y into int like below.
x=int(x)
y=int(y)
answered Dec 19, 2015 at 6:38
SPradhanSPradhan
671 silver badge8 bronze badges
You will have to put:
X = input("give starting number")
X = int(X)
Y = input("give ending number")
Y = int(Y)
BartoszKP
34.2k14 gold badges104 silver badges129 bronze badges
answered Oct 7, 2013 at 21:02
MafiaCureMafiaCure
651 gold badge1 silver badge11 bronze badges
Or you can also use eval(input('prompt'))
.
BartoszKP
34.2k14 gold badges104 silver badges129 bronze badges
answered Feb 6, 2017 at 6:57
3
The Python range method can only accept integer values as arguments. All the three arguments it accepts must be of
int
data type, and if we try to pass a string number value, we will receive the error
«TypeError: ‘str’ object cannot be interpreted as an integer»
.
This Python guide discusses»
TypeError: 'str' object cannot be interpreted as an integer
» in detail. It also discusses a common example scenario where you may encounter this error in your program.
By the end of this tutorial, you will have a complete idea of how to fix this error in Python.
With the help of the range() function, we can create a list-like object of integer numbers. The range() function is generally used with for loop when we want to iterate over a list using the list index number. The range function can accept 3 arguments, start, end and steps. And all these three need to be an integer value of int data type.
Example
for even in range(0,20,2):
print(even)
Output
0
2
4
6
8
10
12
14
16
18
In this example
0
,
20
and
2
all three are the integer number with the int data type, and if we try to pass the same number with the string data type, Python will raise the error
TypeError: 'str' object cannot be interpreted as an integer
.
Error Example
for even in range(0,'20',2):
print(even)
Output
Traceback (most recent call last):
File "main.py", line 1, in
for even in range(0,'20',2):
TypeError: 'str' object cannot be interpreted as an integer
In this example, we received the error because the second argument in the
range(0,
'20'
, 2)
function is a string. And by reading the error statement,
TypeError: 'str' object cannot be interpreted as an integer
we can conclude why Python raised this error. Like a standard error statement, this error also has two sub-statements.
- TypeError is the Exception Type
- The ‘str’ object cannot be interpreted as an integer in the error message.
We are receiving the TypeError exception becaue the range function was expecting an int data type value, and we passed a string. And the error message »
‘str’ object cannot be interpreted as an integer»
is clearly telling us that Python could not use the string data because it was expecting an integer.
Common Example Scenario
Now let’s discuss a common case where you may encounter the following error in your Python program. Let’s say we need to write
a program
that prints all the prime numbers between 1 t0 n. Where n is the last number of the series.
Error Example
#function that check if the number is a prime number or not
def is_prime(num):
for i in range(2,num):
if num % i ==0:
return False
return True
#input the number upto which we want to find the prime numbers
n = input("Enter the last number: ")
print(f"Prime numbers upto {n} are:")
for i in range(2,n):
if is_prime(i):
print(i)
Output
Enter the last number: 12
Prime numbers upto 12 are:
Traceback (most recent call last):
File "main.py", line 12, in
for i in range(2,n):
TypeError: 'str' object cannot be interpreted as an integer
Break the error
After reading the error statement, we can tell that there is something wrong with the statement
for i in range(2,n)
. And by reading the Error message, we can easily conclude that the value of
n
in string is not an integer.
Solution
Whenever we accept input from the user, it is always stored in string data type. If we want to pass that input data into a function like
range()
, we first need to convert it into an integer using the int() function.
#function that check if the number is a prime number or not
def is_prime(num):
for i in range(2,num):
if num % i ==0:
return False
return True
#input the number upto which we want to find the prime numbers
#and convert it into integer
n = int(input("Enter the last number: "))
print(f"Prime numbers upto {n} are:")
for i in range(2,n+1):
if is_prime(i):
print(i)
Output
Enter the last number: 12
Prime numbers upto 12 are:
2
3
5
7
11
Now our code runs smoothly without any errors.
Conclusion
The Error
«TypeError: ‘str’ object cannot be interpreted as an integer»
is very common when we deal with range functions and identifiers. This error occurs in a Python program when we pass a string number or value to the range function instead of integers. The most common case is when we input the data from the user and use the same data with the range function without converting it into an integer.
If you are still getting this error in your Python program, feel free to send your query and code in the comment section. We will try to help you as soon as possible.
People are also reading:
-
List Comprehension in Python
-
Python List
-
How to Declare a List in Python?
-
Python Directory
-
File Operation
-
Python Exception
-
Exception Handling
-
Anonymous Function
-
Python Global, Local and Nonlocal
-
Python Arrays
The range() method only accepts integer values as a parameter. If you try to use the range()
method with a string value, you’ll encounter the “TypeError: ‘str’ object cannot be interpreted as an integer” error.
This guide discusses why you may encounter this error and what it means. We’ll walk through an example scenario to help you understand this problem and fix it in your program.
Find Your Bootcamp Match
- Career Karma matches you with top tech bootcamps
- Access exclusive scholarships and prep courses
Select your interest
First name
Last name
Phone number
By continuing you agree to our Terms of Service and Privacy Policy, and you consent to receive offers and opportunities from Career Karma by telephone, text message, and email.
TypeError: ‘str’ object cannot be interpreted as an integer
The range()
method creates a list of values in a particular range. It is commonly used with a for loop to run a certain number of iterations.
The method only accepts integer values as arguments. This is because the values that range()
creates are integers. Consider the following program:
create_range = range(5, 10) for n in create_range: print(n)
Our program prints out five integers to the console:
If range()
accepted strings, it would be more difficult for the function to determine what range of numbers should be created. That’s why you always need to specify integers as arguments. In the above example, 5 and 10 were our arguments.
An Example Scenario
We’re going to build a program that lets a pizza restaurant view the names and prices of the most popular pizzas on their menu. To start, define two lists that store the information with which our program will work:
names = ["Pepperoni", "Margherita", "Ham and Pineapple", "Brie and Chive"] prices = [9.00, 8.40, 8.40, 9.50]
These lists are parallel and appear in order of how popular a pizza is. That means the values at a particular position in the list correspond with each other. For instance, the price of a “Brie and Chive” pizza is $9.50.
Our next task is to ask the user how many pizzas they would like to display. We can do this using an input() statement:
to_display = input("Enter the number of pizzas you would like to display: ")
Now we know the number of pizzas about which the user is seeking information, we can use a for loop to print each pizza and its price to the console:
for p in range(0, to_display): print("{} costs ${}.".format(names[p], prices[p]))
Our program prints out a message containing the name of each pizza and the price of that pizza. Our loop stops when it has iterated through the number of pizzas a user has requested to display to the console.
Let’s run our program and see if it works:
Enter the number of pizzas you would like to display: 2 Traceback (most recent call last): File "main.py", line 6, in <module> for p in range(0, to_display): TypeError: 'str' object cannot be interpreted as an integer
Our program returns an error on the line of code where we define our for loop.
The Solution
We have created a for loop that runs a particular set of times depending on the value the user inserted into the console.
The problem with our code is that input()
returns a string, not an integer. This means our range()
statement is trying to create a range of values using a string, which is not allowed. This is what our code evaluated in our program:
for p in range(0, "2"): print("{} costs ${}.".format(names[p], prices[p]))
To fix this error, we must convert “to_display” to an integer. We can do this using the int()
method:
for p in range(0, int(to_display)): print("{} costs ${}.".format(names[p], prices[p]))
“to_display” is now an integer. This means we can use the value to create a range of numbers. Let’s run our code:
Enter the number of pizzas you would like to display: 2 Pepperoni costs $9.0. Margherita costs $8.4.
Our code successfully prints out the information that we requested. We can see the names of the two most popular pizzas and the prices of those pizzas.
Conclusion
The “TypeError: ‘str’ object cannot be interpreted as an integer” error is raised when you pass a string as an argument into a range()
statement. To fix this error, make sure all the values you use in a range()
statement are integers.
Now you have the knowledge you need to fix this error like a professional!
If you are getting trouble with the error “TypeError: ‘str’ object cannot be interpreted as an integer”, do not worry. Today, our article will give a few solutions and detailed explanations to handle the problem. Keep on reading to get your answer.
Why does the error “TypeError: ‘str’ object cannot be interpreted as an integer” occur?
TypeError is an exception when you apply a wrong function or operation to the type of objects. “TypeError: ‘str’ object cannot be interpreted as an integer” occurs when you try to pass a string as the parameter instead of an integer. Look at the simple example below that causes the error.
Code:
myStr = "Welcome to Learn Share IT" for i in range(myStr): print(i)
Result:
Traceback (most recent call last)
in <module>
----> 3 for i in range(myStr):
TypeError: 'str' object cannot be interpreted as an integer
The error occurs because the range()
function needs to pass an integer number instead of a string.
Let’s move on. We will discover solutions to this problem.
Solutions to the problem
Traverse a string as an array
A string is similar to an array of strings. As a result, when you want to traverse a string, do the same to an array. We will use a loop from zero to the length of the string and return a character at each loop. The example below will display how to do it.
Code:
myStr = "Welcome to Learn Share IT" for i in range(len(myStr)): print(myStr[i], end=' ')
Result:
W e l c o m e t o L e a r n S h a r e I T
Traverse elements
The range()
function is used to loop an interval with a fix-step. If your purpose is traversing a string, loop the string directly without the range()
function. If you do not know how to iterate over all characters of a string, look at our following example carefully.
Code:
myStr = "Welcome to Learn Share IT" for i in myStr: print(i, end=' ')
Result:
W e l c o m e t o L e a r n S h a r e I T
Use enumerate() function
Another way to traverse a string is by using the enumerate()
function. This function not only accesses elements of the object but also enables counting the iteration. The function returns two values: The counter and the value at the counter position.
Code:
myStr = "Welcome to Learn Share IT" for counter, value in enumerate(myStr): print(value, end=' ')
Result:
W e l c o m e t o L e a r n S h a r e I T
You can also get the counter with the value like that:
myStr = "Welcome to Learn Share IT" for counter, value in enumerate(myStr): print(f"({counter},{value})", end= ' ')
Result:
(0,W) (1,e) (2,l) (3,c) (4,o) (5,m) (6,e) (7, ) (8,t) (9,o) (10, ) (11,L) (12,e) (13,a) (14,r) (15,n) (16, ) (17,S) (18,h) (19,a) (20,r) (21,e) (22, ) (23,I) (24,T)
Summary
Our article has explained the error “TypeError: ‘str’ object cannot be interpreted as an integer” and showed you how to fix it. We hope that our article is helpful to you. Thanks for reading!
Maybe you are interested:
- UnicodeDecodeError: ‘ascii’ codec can’t decode byte
- TypeError: string argument without an encoding in Python
- TypeError: Object of type DataFrame is not JSON serializable in Python
My name is Robert Collier. I graduated in IT at HUST university. My interest is learning programming languages; my strengths are Python, C, C++, and Machine Learning/Deep Learning/NLP. I will share all the knowledge I have through my articles. Hope you like them.
Name of the university: HUST
Major: IT
Programming Languages: Python, C, C++, Machine Learning/Deep Learning/NLP
Ситуация: мы пишем на Python программу для ветеринарной клиники, и у нас есть список животных, которых мы лечим:
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
Нам нужно вывести список всех этих животных на экран, поэтому будем использовать цикл. Мы помним, что для организации циклов в питоне используется команда range(), которая берёт диапазон и перебирает его по одному элементу, поэтому пишем простой цикл:
# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
# перебираем все элементы списка
for i in range(animals):
# и выводим их по одному на экран
print(animals[i])
Но при запуске программа останавливается и выводит ошибку:
❌ TypeError: 'list' object cannot be interpreted as an integer
Странно, мы же всё сделали по правилам, почему так?
Что это значит: команда range() работает с диапазонами, которые явно представлены в числовом виде, например range(5). А у нас вместо этого стоит список со строковыми значениями. Python не знает, как это обработать в виде чисел, поэтому выдаёт ошибку.
Когда встречается: когда в диапазоне мы указываем сам список или массив, вместо того чтобы указать количество элементов в нём.
Как исправить ошибку TypeError: ‘list’ object cannot be interpreted as an integer
Если вы хотите организовать цикл, в котором нужно перебрать все элементы списка или строки, используйте дополнительно команду len(). Она посчитает количество элементов в вашей переменной и вернёт числовое значение, которое и будет использоваться в цикле:
# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']
# получаем длину списка и перебираем все его элементы
for i in range(len(animals)):
# и выводим их по одному на экран
print(animals[i])
Практика
Попробуйте выяснить самостоятельно, есть ли здесь фрагмент кода, который работает без ошибок:
lst = [3,5,7,9,2,4,6,8]
for i in range(lst):
print(lst[i])
lst = (3,5,7,9,2,4,6,8)
for i in range(lst):
print(lst[i])
lst = (3)
for i in range(lst):
print(lst[i])
Вёрстка:
Кирилл Климентьев
На чтение 6 мин. Просмотров 36.3k. Опубликовано 03.12.2016
Набрел на занятную статью о частых ошибках на Python у начинающих программистов. Мне кажется, она полезна будет для тех, кто перешел с другого языка или только планирует переход. Далее идет перевод.
Поиск решения проблем с сообщениями об ошибках, выдаваемых при запуске программ в Python, может доставлять трудности, если вы изучаете этот язык программирования впервые. Далее будут описаны наиболее частые ошибки, встречающиеся при запуске программ и вызывающие сбой при выполнении.
1) Пропущено двоеточие в конце строки после управляющих конструкций типа if, elif, else, for, while, class, or def, что приведет к ошибке типа SyntaxError: invalid syntax
Пример кода:
if spam == 42 print(‘Hello!’) |
2) Использование = вместо == приводит к ошибке типа SyntaxError: invalid syntax
Символ = является оператором присваивания, а символ == — оператором сравнения.
Эта ошибка возникает в следующем коде:
if spam = 42: print(‘Hello!’) |
3) Использование неправильного количества отступов.
Возникнет ошибка типа IndentationError: unexpected indent, IndentationError: unindent does not match any outer indentation level и IndentationError: expected an indented block
Нужно помнить, что отступ необходимо делать только после :, а по завершению блока обязательно вернуться к прежнему количеству отступов.
Пример ошибки:
print(‘Hello!’) print(‘Howdy!’) |
и тут
if spam == 42: print(‘Hello!’) print(‘Howdy!’) |
и тут
if spam == 42: print(‘Hello!’) |
4) Неиспользование функции len() в объявлении цикла for для списков list
Возникнет ошибка типа TypeError: ‘list’ object cannot be interpreted as an integer
Часто возникает желание пройти в цикле по индексам элементов списка или строки, при этом требуется использовать функцию range(). Нужно помнить, что необходимо получить значение len(someList) вместо самого значения someList
Ошибка возникнет в следующем коде:
spam = [‘cat’, ‘dog’, ‘mouse’] for i in range(spam): print(spam[i]) |
Некоторые читатели (оригинальной статьи) заметили, что лучше использовать конструкцию типа for i in spam:, чем написанный код выше. Но, когда нужно получить номер итерации в цикле, использование вышенаписанного кода намного полезнее, чем получение значения списка.
От переводчика: Иногда можно ошибочно перепутать метод shape с len() для определения размера списка. При этом возникает ошибка типа ‘list’ object has no attribute ‘shape’
5) Попытка изменить часть строки. (Ошибка типа TypeError: ‘str’ object does not support item assignment)
Строки имеют неизменяемый тип. Эта ошибка произойдет в следующем коде:
spam = ‘I have a pet cat.’ spam[13] = ‘r’ print(spam) |
А ожидается такое результат:
spam = ‘I have a pet cat.’ spam = spam[:13] + ‘r’ + spam[14:] print(spam) |
От переводчика: Подробней про неизменяемость строк можно прочитать тут
6) Попытка соединить нестроковую переменную со строкой приведет к ошибке TypeError: Can’t convert ‘int’ object to str implicitly
Такая ошибка произойдет тут:
numEggs = 12 print(‘I have ‘ + numEggs + ‘ eggs.’) |
А нужно так:
numEggs = 12 print(‘I have ‘ + str(numEggs) + ‘ eggs.’) |
или так:
numEggs = 12 print(‘I have %s eggs.’ % (numEggs)) |
От переводчика: еще удобно так
print(‘This {1} xorosho{0}’.format(‘!’,‘is’)) # This is xorosho! |
7) Пропущена одинарная кавычка в начале или конце строковой переменной (Ошибка SyntaxError: EOL while scanning string literal)
Такая ошибка произойдет в следующем коде:
или в этом:
или в этом:
myName = ‘Al’ print(‘My name is ‘ + myName + . How are you?‘) |
Опечатка в названии переменной или функции (Ошибка типа NameError: name ‘fooba’ is not defined)
Такая ошибка может встретиться в таком коде:
foobar = ‘Al’ print(‘My name is ‘ + fooba) |
или в этом:
или в этом:
От переводчика: очень часто при написании возникают ошибки типа NameError: name ‘true’ is not defined и NameError: name ‘false’ is not defined, связанные с тем, что нужно писать булевные значения с большой буквы True и False
9) Ошибка при обращении к методу объекта. (Ошибка типа AttributeError: ‘str’ object has no attribute ‘lowerr’)
Такая ошибка произойдет в следующем коде:
spam = ‘THIS IS IN LOWERCASE.’ spam = spam.lowerr() |
10) Попытка использовать индекс вне границ списка. (Ошибка типа IndexError: list index out of range)
Ошибка возникает в следующем коде:
spam = [‘cat’, ‘dog’, ‘mouse’] print(spam[6]) |
11) Использование несуществующих ключей для словаря. (Ошибка типа KeyError: ‘spam’)
Ошибка произойдет в следующем коде:
spam = {‘cat’: ‘Zophie’, ‘dog’: ‘Basil’, ‘mouse’: ‘Whiskers’} print(‘The name of my pet zebra is ‘ + spam[‘zebra’]) |
12) Использование зарезервированных в питоне ключевых слов в качестве имени для переменной. (Ошибка типа SyntaxError: invalid syntax)
Ключевые слова (зарезервированные) в питоне невозможно использовать как переменные. Пример в следующем коде:
Python 3 имеет следующие ключевые слова: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield
13) Использование операторов присваивания для новой неинициализированной переменной. (Ошибка типа NameError: name ‘foobar’ is not defined)
Не стоит надеяться, что переменные инициализируются при старте каким-нибудь значением типа 0 или пустой строкой.
Эта ошибка встречается в следующем коде:
spam = 0 spam += 42 eggs += 42 |
Операторы присваивания типа spam += 1 эквивалентны spam = spam + 1. Это означает, что переменная spam уже должна иметь какое-то значение до.
14) Использование локальных переменных, совпадающих по названию с глобальными переменными, в функции до инициализации локальной переменной. (Ошибка типа UnboundLocalError: local variable ‘foobar’ referenced before assignment)
Использование локальной переменной в функции с именем, совпадающим с глобальной переменной, опасно. Правило: если переменная в функции использовалась с оператором присвоения, это всегда локальная переменная для этой функции. В противном случае, это глобальная переменная внутри функции.
Это означает, что нельзя использовать глобальную переменную (с одинаковым именем как у локальной переменной) в функции до ее определения.
Код с появлением этой ошибки такой:
someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction() |
15) Попытка использовать range() для создания списка целых чисел. (Ошибка типа TypeError: ‘range’ object does not support item assignment)
Иногда хочется получить список целых чисел по порядку, поэтому range() кажется подходящей функцией для генерации такого списка. Тем не менее нужно помнить, что range() возвращает range object, а не список целых чисел.
Пример ошибки в следующем коде:
spam = range(10) spam[4] = —1 |
Кстати, это работает в Python 2, так как range() возвращает список. Однако попытка выполнить код в Python 3 приведет к описанной ошибке.
Нужно сделать так:
spam = list(range(10)) spam[4] = —1 |
16) Отсутствие операторов инкремента ++ или декремента —. (Ошибка типа SyntaxError: invalid syntax)
Если вы пришли из другого языка типа C++, Java или PHP, вы можете попробовать использовать операторы ++ или — для переменных. В Питоне таких операторов нет.
Ошибка возникает в следующем коде:
Нужно написать так:
17) Как заметил читатель Luciano в комментариях к статье (оригинальной), также часто забывают добавлять self как первый параметр для метода. (Ошибка типа TypeError: myMethod() takes no arguments (1 given)
Эта ошибка возникает в следующем коде:
class Foo(): def myMethod(): print(‘Hello!’) a = Foo() a.myMethod() |
Краткое объяснение различных сообщений об ошибках представлено в Appendix D of the «Invent with Python» book.
Полезные материалы
Оригинал статьи
Наиболее частые проблемы Python и решения (перевод)
Вещи, о которых следует помнить, программируя на Python
Python 3 для начинающих: Часто задаваемые вопросы