List object cannot be interpreted as an integer как исправить

Ситуация: мы пишем на 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])

Вёрстка:

Кирилл Климентьев

There are many Python inbuilt functions that accept only integer values as arguments. For instance, the

range()

function accepts integer values for start, end, and step arguments. Another example is the Python list’s

pop()

method that accepts integer values as an index number. If we accidentally pass a list object to such methods, then Python raises the

TypeError: 'list' object cannot be interpreted as an integer

error.

This  Python guide provides a detailed view of why this error occurs in a Python program and how to debug it. It also discusses two common example scenarios that demonstrate the error and its solution.

Built-in functions and methods like range(), pop(), etc. expect integer values as arguments, and if we pass a list object to these functions, we will receive the

TypeError: 'list' object cannot be interpreted as an integer

Error.


Example

even = range([2, 10, 2])

print(list(even))


Output

TypeError: 'list' object cannot be interpreted as an integer

Like other Python error statements, this error has two parts separated by a colon


:

.

  1. TypeError
  2. ‘list’ object cannot be interpreted as an integer


1. TypeError

TypeError is a Python standard Exception type. Python raises this error when we perform an unsupported operation on an invalid data type object. Or if we try to pass a wrong data type object as an argument to a built-in function or method. In the above example

range()

was expecting integer arguments, and we passed a list. That’s why Python raised the error.


2. ‘list’ object cannot be interpreted as an integer

This is the error message, telling us that the method or function cannot interpret a list object as an integer. This simply means the function or method was expecting an integer value, not a list.


Solution

To solve the above problem, we need to make sure that we are not passing individual integer numbers as arguments, not the complete list.

even = range(2, 10, 2)

print(list(even))


Output

[2, 4, 6, 8]


Common Example Scenario

Now we know why this error occurs in a Python program, let’s discuss the two common cases where many Python learners commit mistakes and encounter this error.

  1. Forget to put the len() function while looping through the list with the index number
  2. Try to remove multiple items from a list using pop


Case 1: Forget to put the len() function while looping through the list with the index number

This is the most common mistake that many Python learners commit, and they encounter the

TypeError: 'list' object cannot be interpreted as an integer

Error. Although using the

for loop

, we can loop through the list elements. Sometimes we come across situations where we need the list’s index numbers to access the individual list element.

To loop over the list with its index number, we use the

range()

function and pass the total length of the list into the range function. To find the length of the list, we use the

len()

function. But if we forget to find the length of the list and directly pass the list to the range() function, then we will encounter the

'list' object cannot be interpreted as an integer

error.


Example

Let’s say we have two list’s products and discounts.

products = ["Shoes", " Casual Shirts", "Formal Shirts", "Jackets", "Sweaters"]

discount = ["10%", "40%", "25%", "30%", "21%"]

The

products

contain the list of products, and the

discount

contains the discount offer on the corresponding products.

We need to write a script that prints the product and its corresponding discount value.


Error Example

products = ["Shoes", " Casual Shirts", "Formal Shirts", "Jackets", "Sweaters"]
discount = ["10%", "40%", "25%", "30%", "21%"]

for index in range(products): #error
	print(discount[index], "off on", products[index])


Output

Traceback (most recent call last):
  File "main.py", line 5, in 
    for index in range(products):
TypeError: 'list' object cannot be interpreted as an integer


Break the error

In this particular example, we are getting this error because we have passed a list object

products

to the

range()

function.

Solution

To solve the error, all we need to do is pass the list length to the range function.

products = ["Shoes", " Casual Shirts", "Formal Shirts", "Jackets", "Sweaters"]
discount = ["10%", "40%", "25%", "30%", "21%"]


for index in range(len(products)): #error
	print(discount[index], "off on", products[index])


Output

10% off on Shoes
40% off on Casual Shirts
25% off on Formal Shirts
30% off on Jackets
21% off on Sweaters


Case 2: Try to remove multiple items from a list using pop

Using the pop() method, we can remove items from a list by specifying the item index number. The pop method can only accept a single integer value as an argument, which means we can only remove one item with one call of the pop() method on a list.

And if we try to pass a list of index numbers to the pop() method thinking that it will pop out that many items, we will receive the

TypeError: 'list' object cannot be interpreted as an integer

Error.


Example

items  = ["A", "B", "C", "D", "E", "F", "G"]

#remove the item that has 3 and 5 index value
items.pop([3, 5])

print(items)


Output

Traceback (most recent call last):
  File "main.py", line 4, in 
    items.pop([3, 5])
TypeError: 'list' object cannot be interpreted as an integer


Break the output

In this example, we are getting the same error. The pop() method only accepts an integer number, and we have passed a list

[3, 5]

.


Solution

The pop method can only remove one item at a time, and when we want to remove multiple items, we need to create a for loop that can execute the pop method the desired number of times.

items  = ["A", "B", "C", "D", "E", "F", "G"]

#remove the items that has 3 and 5 index value 
indices = [3, 5]

for index in indices:
	items.pop(index)

print(items)


Output

['A', 'B', 'C', 'E', 'F']

This example is very minimal; still, it lays the basic concept for the reason of error.


Conclusion

The

“TypeError: ‘list’ object cannot be interpreted as an integer”

error raises in a Python program when we pass a list object to a built-in function or method that was expecting an integer value as an argument.

To solve this error in your Python program, you need to make sure that you are not passing a list to such functions that are expecting the integer value. You will mostly encounter this error when you pass the complete list to the

range()

function instead of the individual item or the length of the list.

If you are still getting this error in your Python program, please share your code and query in the comment section. We will try to help you in debugging.


People are also reading:

  • Python List Methods: All you need to Know

  • Replace Item in Python List

  • Python typeerror: ‘str’ object is not callable Solution

  • List Comprehension in Python

  • Python List or Array

  • How do you remove duplicates from a Python list while preserving order?

  • What is a constructor in Python?

  • Python List Files in a Directory: A Complete Guide

  • How to Play sounds in Python?

  • Python typeerror: ‘int’ object is not subscriptable Solution

Python shows TypeError: list object cannot be interpreted as an integer when you use a list where an integer is expected.

This article shows two common cases where this error occurs:

Pass a list to the range function

One common case where this error occurs is when you pass a list to the range function:

# passing a list to the range function:
my_list = [1, 2, 3]

# 👇️ range expects an integer, but a list is passed
for i in range(my_list):
    print(i)

The range function can only accept an integer argument, but we passed a list in the example above.

This causes Python to respond with the following error:

Traceback (most recent call last):
  File ...
    for i in range(my_list):
TypeError: 'list' object cannot be interpreted as an integer

To solve this error, you need to pass an integer instead of a list to the function that causes the error.

If you want to iterate over a list with a for loop, you can pass the list directly as follows:

my_list = [1, 2, 3]

for i in my_list:  # ✅
    print(i)

# 1
# 2
# 3

If you also need the index value in the for loop, then you can use the enumerate function.

The enumerate function returns the index and value of a list, so you need to define two variables in the for loop like this:

my_list = ['z', 'x', 'c']

for idx, val in enumerate(my_list):  # ✅
    print(idx, val)

# 0 z
# 1 x
# 2 c

The my_list values are changed so that you can see the difference better.

The indices are 0, 1, 2 and the values are z, x, c. The enumerate function allows you to use the index values in your for statement.

Pass a list to the pop function

You can also get this error when you pass a list to the list.pop function:

my_list = [1, 2, 3]

my_list.pop([1])

Python responds with the following error:

Traceback (most recent call last):
  File ...
    my_list.pop([1])
TypeError: 'list' object cannot be interpreted as an integer

The pop function accepts only an integer argument that represents the index of the element you want to pop from the list.

You need to remove the square brackets surrounding the argument as follows:

my_list = [1, 2, 3]

val = my_list.pop(1)  # ✅

print(val)  # 2

Keep in mind that you need to pass an integer instead of a list, not a list with integer elements.

To conclude, the Python TypeError: list object cannot be interpreted as an integer means you are passing a list to a function that expects an integer value.

To solve this error, don’t pass a list to the range function, and use enumerate if you want to iterate over a list with index value included.

You also need to pass an integer to the pop function as shown in this article.

Now you’ve learned how to solve another Python error. Nice work!

To fix the error “TypeError: ‘list’ object cannot be interpreted as an integer” in Python, there are some solutions we have effectively tested. Follow the article to better understand.

In Python, ‘list’ is a data type that allows storing various data types inside it and retrieving their values through the position of the elements. In Python, you can say ‘list’ is the most flexible data type.

The integer is a Python data type that represents negative integers, positive integers, and zero.

The TypeError in Python is thrown when you perform an unsupported operation on an object with an invalid data type.

The error “TypeError: ‘list’ object cannot be interpreted as an integer” happens when you try to pass a list to a function, but the function cannot interpret the list as an integer.

Example: 

clubs = ["Arsenal", "Man City", "Newcastle", "Man United", "Liverpool", "Tottenham"]
on_top4 = [True, True, True, True, False, False]

for i in range(clubs):
	if on_top4[i] == True:
		print(f"{clubs[i]} participated in the Champion League")
	else:
		print(f"{clubs[i]} have missed the chance to participate in the Champion League")

Output:

for i in range(clubs):
TypeError: 'list' object cannot be interpreted as an integer

In the above example, the range() function wants to be passed as an integer, but I pass it as a list, so the program gives an error.

How to solve this error?

Use len() function to iterate over list

We use the len() function in Python to find the length of a string in Python. To count the number of elements in a Python list or count the number of elements in a Python array, we use the following syntax.

Syntax:

len(value)

Parameters:

  • value: the object needs to calculate the length or count the number of elements.  

Example:

  • Make a ‘number’ list.
  • Use len() function to return several elements in the ‘number’ list.
clubs = ["Arsenal", "Man City", "Newcastle", "Man United", "Liverpool", "Tottenham"]
on_top4 = [True, True, True, True, False, False]

# Use len() function returns several elements in the list 'clubs'
for i in range(len(clubs)):
	if on_top4[i] == True:
		print(f"{clubs[i]} participated in the Champion League")
	else:
		print(f"{clubs[i]} has missed the chance to participate in the Champion League") 

Output:

Arsenal participated in the Champion League
Man City participated in the Champion League
Newcastle participated in the Champion League
Man United participated in the Champion League
Liverpool has missed the chance to participate in the Champion League
Tottenham has missed the chance to participate in the Champion League

Remove the range() function

Example:

  • Make a list.
  • Remove the range() function.
  • Iterate the list directly.
clubs = ["Arsenal", "Man City", "Newcastle", "Man United", "Liverpool", "Tottenham"]
on_top4 = [True, True, True, True, False, False]

i = 0
for c in clubs:
	if on_top4[i] == True:
		print(f"{clubs[i]} participated in the Champion League")
	else:
		print(f"{clubs[i]} has missed the chance to participate in the Champion League")
        
    i = i + 1

Output:

Arsenal participated in the Champion League
Man City participated in the Champion League
Newcastle participated in the Champion League
Man United participated in the Champion League
Liverpool has missed the chance to participate in the Champion League
Tottenham has missed the chance to participate in the Champion League

Use the enumerate() function

In Python, the enumerate() function adds a counter before each iterable and returns the result as an enumerated object.

Syntax:

enumerate(iterable, start=0)

Parameters:

  • iterable: string, list, tuple, iterator.
  • start: enumerate() starts the counter from start.

Example:

  • Make a list.
  • The enumerate() function returns the result as an enumeration object.
clubs = ["Arsenal", "Man City", "Newcastle", "Man United", "Liverpool", "Tottenham"]
on_top4 = [True, True, True, True, False, False]

for club in enumerate(clubs):
	if on_top4[club[0]] == True:
		print(f"{club[1]} participated in the Champion League")
	else:
		print(f"{club[1]} has missed the chance to participate in the Champion League")

Output:

Arsenal participated in the Champion League
Man City participated in the Champion League
Newcastle participated in the Champion League
Man United participated in the Champion League
Liverpool has missed the chance to participate in the Champion League
Tottenham has missed the chance to participate in the Champion League

Summary

If you have any questions about the error “TypeError: ‘list’ object cannot be interpreted as an integer” in Python, please leave a comment below. I will support your questions. Thanks for reading!

Maybe you are interested:

  • TypeError: < not supported between instances of list and int
  • TypeError: Object of type DataFrame is not JSON serializable in Python
  • TypeError: string argument without an encoding in Python
  • TypeError: unsupported operand type(s) for -: str and int

Jason Wilson

My name is Jason Wilson, you can call me Jason. My major is information technology, and I am proficient in C++, Python, and Java. I hope my writings are useful to you while you study programming languages.


Name of the university: HHAU
Major: IT
Programming Languages: C++, Python, Java

На чтение 6 мин. Просмотров 36.7k. Опубликовано 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?)

8) Опечатка в названии переменной или функции (Ошибка типа 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 для начинающих: Часто задаваемые вопросы

Добавить комментарий