Int object is not subscriptable python ошибка

If you are working with Python, you may encounter the error message “TypeError: ‘int’ object is not subscriptable” when trying to access an element of an integer variable using square brackets. This error occurs because integers are not subscriptable, meaning you cannot access individual elements of an integer like you can with a list or a string.

fix typeerror int object is not subscriptable in python

In this tutorial, we will explore the causes of this error and provide several solutions to fix it. We will also discuss some best practices to avoid this error in the future. So, let’s get started!

Understanding the TypeError: 'int' object is not subscriptable error

The error message here is quite helpful. It tells us that we’re trying to use an integer as a subscriptable object (for example, a list, string, tuple, etc.) using the square brackets notation [] to retrieve a specific element or a slice of elements. An integer object represents an integer value and not a sequence and thus, we cannot really use them as subscriptible objects. If you try to do so, you’ll get this error.

Let’s look at an example.

# integer variable
score = 91
# using integer as a subscriptable object
print(score[0])

Output:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Cell In[3], line 4
      2 score = 91
      3 # using integer as a subscriptable object
----> 4 print(score[0])

TypeError: 'int' object is not subscriptable

In the above example, we created an integer variable score that stores the integer value 91. We then tried to access the value at index 0 in the variable score and we get the error TypeError: 'int' object is not subscriptable.

You’ll get the same if you try to perform a slice operation on an integer value.

# integer variable
score = 91
# using integer as a subscriptable object
print(score[0:3])

Output:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Cell In[4], line 4
      2 score = 91
      3 # using integer as a subscriptable object
----> 4 print(score[0:3])

TypeError: 'int' object is not subscriptable

In the above scenarios, we are using an integer as a subscriptable object which is not allowed (and doesn’t really make sense) since an integer represents a single value and not a sequence of values and thus a TypeError is raised.

Fixing the error

To fix this error, you can either not use integer objects as a subscriptable object or use a subscriptable object like a list or a string instead.

Let’s revisit the examples from above and fix those errors.

# integer variable
score = 91
# print the integer
print(score)

Output:

91

Here, we are not using the integer value as subscriptable object and instead directly printing its value. You can see that we don’t get an error.

# list of scores
scores = [91, 77, 82, 45, 89]
# using list as a subscriptable object
print(scores[0:3])

Output:

[91, 77, 82]

Here, instead of using an integer value, we are using a list that is subscriptable, and thus performing operations like slicing or accessing a value at an index won’t result in this TypeError.

Another use case could be you are trying to get the digits in a number. In that case, convert the integer to a string object (which is subscriptable) and then perform the required operations. Let’s look at an example.

# integer variable
num = 12345
# integer to string
num_str = str(num)

# get the first digit
print(num_str[0])
# get the last digit
print(num_str[-1])
# get the first three digits
print(num_str[:3])

Output:

1
5
123

Note that the solution to correct this error will depend on your use case and what you’re trying to achieve.

Conclusion

The “TypeError: ‘int’ object is not subscriptable” error occurs when we try to access an index of an integer or slice an integer, which is not possible as integers are not subscriptable. To fix this error, you can choose to not perform such operations on integers or use a subscriptable type like a list or a string instead.

You might also be interested in –

  • How to Fix – TypeError unhashable type ‘set’
  • How to Fix – TypeError can’t multiply sequence by non-int of type ‘float’
  • How to Fix – TypeError: string indices must be integers
  • Piyush Raj

    Piyush is a data professional passionate about using data to understand things better and make informed decisions. He has experience working as a Data Scientist in the consulting domain and holds an engineering degree from IIT Roorkee. His hobbies include watching cricket, reading, and working on side projects.

    View all posts

В чем смысл и причина ошибки

Ошибка «‘X’ object is not subscriptable» означает, что вы пытаетесь обратиться к объекту типа X по индексу, но этот тип не поддерживает обращение по индексу. Например, 1[0] не имеет смысла.

После первой итерации цикла переменная ways содержит значение [(2, 0), 5, 1, 4, 1, 0, 1]. Заметно, что добавлялись не кортежи, а просто числа. Код обращается к этим числам по индексу, что и приводит к нашей ошибке.

Почему не добавляются кортежи? Дело в сигнатуре метода extend:

extend(self, iterable):
    ...

Этот метод принимает iterable, итерирует и каждое полученное значение добавляет в список. В вашем примере он получает кортеж из двух чисел и добавляет в список эти числа.

Как добавить кортеж в список одним элементом

Проще всего будет использовать метод append, который принимает 1 объект.

ways.append((first_op(ways[ind][0]),  ind + 1))

Можно также создать новый кортеж или список из одного элемента, как рекомендуется в соседнем ответе.

# кортеж из одного элемента: (a,)
# запятая обязательна!
ways.extend( ( (first_op(ways[ind][0], ind + 1), ) )

# список из одного элемента: [a]
ways.extend( [ (first_op(ways[ind][0], ind + 1) ] )

TypeError: 'int' object is not subscriptable [Solved Python Error]

The Python error «TypeError: ‘int’ object is not subscriptable» occurs when you try to treat an integer like a subscriptable object.

In Python, a subscriptable object is one you can “subscript” or iterate over.

You can iterate over a string, list, tuple, or even dictionary. But it is not possible to iterate over an integer or set of numbers.

So, if you get this error, it means you’re trying to iterate over an integer or you’re treating an integer as an array.

In the example below, I wrote the date of birth (dob variable) in the ddmmyy format. I tried to get the month of birth but it didn’t work. It threw the error “TypeError: ‘int’ object is not subscriptable”:

dob = 21031999
mob = dob[2:4]

print(mob)

# Output: Traceback (most recent call last):
#   File "int_not_subable..py", line 2, in <module>
#     mob = dob[2:4]
# TypeError: 'int' object is not subscriptable

How to Fix the «TypeError: ‘int’ object is not subscriptable» Error

To fix this error, you need to convert the integer to an iterable data type, for example, a string.

And if you’re getting the error because you converted something to an integer, then you need to change it back to what it was. For example, a string, tuple, list, and so on.

In the code that threw the error above, I was able to get it to work by converting the dob variable to a string:

dob = "21031999"
mob = dob[2:4]

print(mob)

# Output: 03

If you’re getting the error after converting something to an integer, it means you need to convert it back to string or leave it as it is.

In the example below, I wrote a Python program that prints the date of birth in the ddmmyy format. But it returns an error:

name = input("What is your name? ")
dob = int(input("What is your date of birth in the ddmmyy order? "))
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Hi, {name}, \nYour date of birth is {dd} \nMonth of birth is {mm} \nAnd year of birth is {yy}.")

#Output: What is your name? John Doe
# What is your date of birth in the ddmmyy order? 01011970
# Traceback (most recent call last):
#   File "int_not_subable.py", line 12, in <module>
#     dd = dob[0:2]
# TypeError: 'int' object is not subscriptable

Looking through the code, I remembered that input returns a string, so I don’t need to convert the result of the user’s date of birth input to an integer. That fixes the error:

name = input("What is your name? ")
dob = input("What is your date of birth in the ddmmyy order? ")
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Hi, {name}, \nYour date of birth is {dd} \nMonth of birth is {mm} \nAnd year of birth is {yy}.")

#Output: What is your name? John Doe
# What is your date of birth in the ddmmyy order? 01011970
# Hi, John Doe,
# Your date of birth is 01
# Month of birth is 01
# And year of birth is 1970.

Conclusion

In this article, you learned what causes the «TypeError: ‘int’ object is not subscriptable» error in Python and how to fix it.

If you are getting this error, it means you’re treating an integer as iterable data. Integers are not iterable, so you need to use a different data type or convert the integer to an iterable data type.

And if the error occurs because you’ve converted something to an integer, then you need to change it back to that iterable data type.

Thank you for reading.



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Introduction

Some of the objects in python are subscriptable. This means that they hold and hold other objects, but an integer is not a subscriptable object. We use Integers used to store whole number values in python. If we treat an integer as a subscriptable object, it will raise an error. So, we will be discussing the particular type of error that we get while writing the code in python, i.e., TypeError: ‘int’ object is not subscriptable. We will also discuss the various methods to overcome this error.

What is TypeError?

The TypeError occurs when you try to operate on a value that does not support that operation. Let us understand with the help of an example:

Suppose we try to concatenate a string and an integer using the ‘+’ operator. Here, we will see a TypeError because the + operation is not allowed between the two objects that are of different types.

#example of typeError

S = "Latracal Solutions"
number = 4
print(S + number)

Output:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print(S + number)
TypeError: can only concatenate str (not "int") to str

Explanation:

Here, we have taken a string ‘Latracal Solutions” and taken a number. After that, in the print statement, we try to add them. As a result: TypeError occurred.

What is ‘int’ object is not subscriptable?

When we try to concatenate string and integer values, this message tells us that we treat an integer as a subscriptable object. An integer is not a subscriptable object. The objects that contain other objects or data types, like strings, lists, tuples, and dictionaries, are subscriptable. Let us take an example :

1. Number: typeerror: ‘int’ object is not subscriptable

#example of integer which shows a Typeerror

number = 1500
print(number[0])

output:

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    print(number[0])
TypeError: 'int' object is not subscriptable

Explanation:

Here, we have taken a number and tried to print the through indexing, but it shows type error as integers are not subscriptable.

2. List: typeerror: ‘int’ object is not subscriptable

This TyperError problem doesn’t occur in the list as it is a subscriptable object. We can easily perform operations like slicing and indexing.

#list example which will run correctly

Names = ["Latracal" , " Solutions", "Python"]
print(Names[1])

Output:

Solutions

Explanation:

Here firstly, we have taken the list of names and accessed it with the help of indexing. So it shows the output as Solutions.

Daily Life Example of How typeerror: ‘int’ object is not subscriptable can Occur

Let us take an easy and daily life example of your date of birth, written in date, month, and year. We will write a program to take the user’s input and print out the date, month, and year separately.

#Our program begins from here

Date_of_birth = int(input("what is your birth date?"))

birth_date = Date_of_birth[0:2]

birth_month = Date_of_birth[2:4]

birth_year = Date_of_birth[4:8]

print(" birth_date:",birth_date)
print("birth_month:",birth_month)
print("birth_year:",birth_year)

Output:

what is your birth date?31082000
Traceback (most recent call last):
  File "C:/Users/lenovo/Desktop/fsgedg.py", line 3, in <module>
    birth_date = Date_of_birth[0:2] 
TypeError: 'int' object is not subscriptable

Explanation:

Here firstly, we have taken the program for printing the date of birth separately with the help of indexing. Secondly, we have taken the integer input of date of birth in the form of a date, month, and year. Thirdly, we have separated the date, month, and year through indexing, and after that, we print them separately, but we get the output ad TypeError: ‘int’ object is not subscriptable. As we studied above, the integer object is not subscriptable.

Solution of TypeError: ‘int’ object is not subscriptable

We will make the same program of printing data of birth by taking input from the user. In that program, we have converted the date of birth as an integer, so we could not perform operations like indexing and slicing.

To solve this problem now, we will remove the int() statement from our code and run the same code.

#remove int() from the input()

Date_of_birth = input("what is your birth date?")

birth_date = Date_of_birth[0:2]

birth_month = Date_of_birth[2:4]

birth_year = Date_of_birth[4:8]

print(" birth_date:",birth_date)
print("birth_month:",birth_month)
print("birth_year:",birth_year)

Output:

what is your birth date?31082000
 birth_date: 31
birth_month: 08
birth_year: 2000

Explanation:

Here, we have just taken the input into the string by just removing the int(), and now we can do indexing and slicing in it easily as it became a list that is subscriptable, so no error arises.

Must Read

Conclusion: Typeerror: ‘int’ object is not subscriptable

We have learned all key points about the TypeError: ‘int’ object is not subscriptable. There are objects like list, tuple, strings, and dictionaries which are subscriptable. This error occurs when you try to do indexing or slicing in an integer.

Suppose we need to perform operations like indexing and slicing on integers. Firstly, we have to convert the integer into a string, list, tuple, or dictionary.

Now you can easily the solve this python TypeError like an smart coder.

However, if you have any doubts or questions, do let me know in the comment section below. I will try to help you as soon as possible.

Happy Pythoning!

Python TypeError: ‘int’ object is not subscriptable

This error occurs when you try to use the integer type value as an array.

In simple terms, this error occurs when your program has a variable that is treated as an array by your function, but actually, that variable is an integer.

Example 1) Error Code

#Simple program with error

productPrice = 3000

print(productPrice[0])

OUTPUT:

Traceback (most recent call last):
File "F:/python code/intProgram.py", line 3, in <module>
print(productPrice[0])
TypeError: 'int' object is not subscriptable

In the above program as you can see we have declared an integer variable ‘productPrice’ and in the next line, we are trying to print the value of integer variable productPrice[0] as a list.

TypeError: 'int' object is not subscriptable

Correct code

productPrice = 3000

print("Product price is ", productPrice)

Example 2: Error Code

#Code with error

#User input start
productName = input("Enter product name : ")
productPrice = input("Enter product price : ")
#User input ends
x = 0
#giving the value of product price to the variable x in int format
int(x[productPrice])
#calculating the price after discount
productPriceAfterDiscount = 100 - x
#printing the output
print (productName + "is available for Rs. " + productPriceAfterDiscount + ".")

In the example above, we have assigned an integer value to variable ‘productPrice’, but in print statement, we are trying to use it as an array.

Solution

To resolve this error, you need to avoid using integer type values as an array.

Correct code:


#Code without error

#User input start
productName = input("Enter product name : ")
productPrice = input("Enter product price : ")
#User input ends
#giving the value of product price to the variable x in int format
x = int(productPrice)
#calculating the price after discount
productPriceAfterDiscount = x - 100
#printing the output
print (productName + " is available for Rs. " + str(productPriceAfterDiscount) + " after discount.")

How to avoid this Error

You can avoid this error if you keep the following points in your mind:

  • Always use a sensible and meaningful variable name
  • Name of the variables should always describe the data they hold
  • Dont use variable name same as python in-built function name, module name & constants 

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Int cannot be dereferenced java ошибка
  • Int object has no attribute append ошибка
  • Insurgency ошибка this game requires steam
  • Insurgency ошибка battleye
  • Insurgency sandstorm ошибка при запуске

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

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: