У цій статті ми вивчимо, як виправити об’єкт «int», який не має підписки в Python. Але перед цим давайте розберемося, чому це відбувається і що це означає.
Що таке «Int» Object Is Not Subscriptable Error?
Помилка Об’єкт ‘int’ не має підпису виникає, коли ви намагаєтеся використати індексування або нарізку на ціле число , тип даних, який не підтримує ці операції.
Як ми знаємо ціле число в Python це тип даних що представляє ціле число. На відміну від списків або словників, цілі числа не містять послідовність елементів і тому не підтримують індексування чи нарізку.
Наприклад, якщо x = 42 (ціле число), і ми намагаємося зробити щось на кшталт x[0], це спроба отримати доступ до першого елемента x так, якби x був список або a кортеж . Оскільки цілі числа не містять набору елементів, ця операція є недійсною, і ви отримуєте TypeError: об’єкт ‘int’ is not subscriptable.
приклад
Python3
# Example causing 'int' object is not subscriptable error> x>=> 42> # Attempting to use subscript notation on an integer> print>(x[>0>])> |
>
>
Вихід:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 4, in print(number[0]) TypeError: 'int' object is not subscriptable>
Чому виникає помилка «Int» Object Is Not Subscriptable?
Помилка об’єкта «Int» не піддається індексуванню в Python виникає через специфічні характеристики цілочисельних (int) об’єктів. Ось причини виникнення цієї помилки:
- Незмінність цілих чисел
- Невідповідність типу повернення функції
- Немає повторюваної структури
Незмінність цілих чисел
Оскільки ми знаємо, що цілі числа в Python є незмінними, тобто їх значення не можна змінити після створення, а операції підписання чи індексування застосовуються до змінних послідовностей (наприклад, списків, рядки ), де до елементів можна отримати доступ або змінити їх за допомогою індексів.
програмування struct array c
Оскільки цілі числа не є змінними послідовностями, спроба використати квадратні дужки для індексування результатів в об’єкті Int не є помилкою, що піддається індексу.
Python3
# Example triggering 'Int' object is not subscriptable error> num>=> 42> value>=> num[>0>]># Error: 'Int' object is not subscriptable> |
>
>
Вихід:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = num[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable>
Невідповідність типу повернення функції
Очікується, що ця функція поверне список або кортеж, якщо умова має значення False, як вказано гілкою else.
Однак у гілці else функція повертає ціле число замість списку або кортежу, що призводить до помилки «Int» Object Is Not Subscriptable
Python3
def> get_data(condition):> >'''> >This function is expected to return a list or tuple,> >but under certain conditions, it returns an integer.> >'''> >if> condition:> >return> [>1>,>2>,>3>]># Returns a list> >else>:> >return> 42> # Returns an integer> > # Function call with a condition that leads to an integer being returned> result>=> get_data(>False>)> > # Attempting to index the result, which is an integer in this case> first_element>=> result[>0>]> |
>
>
Вихід:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 15, in first_element = result[0] TypeError: 'int' object is not subscriptable>
Немає повторюваної структури
Як ми знаємо, цілі числа не мають ітераційної структури, необхідної для індексування. Ітеровані об’єкти, такі як списки або рядки, мають чітко визначену послідовність елементів, до яких можна отримати доступ за допомогою індексів.
Спроба використати квадратні дужки для цілого числа означає розглядати його так, ніби воно має ітераційні властивості, в результаті чого об’єкт «Int» не є помилкою, що піддається індексу.
java додавання до масиву
Python3
# Example demonstrating misinterpretation of syntax> integer_value>=> 123> value>=> integer_value[>0>]> |
>
>
Вихід:
Hangup (SIGHUP) Traceback (most recent call last): File 'Solution.py', line 3, in value = integer_value[0] # Error: 'Int' object is not subscriptable TypeError: 'int' object is not subscriptable>
Вирішити, що об’єкт «Int» не має підписки в Python
- Використовуйте рядки або списки замість цілих чисел
- Перевірте типи змінних
- Логіка перегляду коду:
Давайте вивчимо їх докладніше
Використовуйте рядки або списки замість цілих чисел
У Python нотація нижнього індексу застосовна до рядків і списків. Тож ми можемо перетворити ціле число на рядок або список перед використанням індексу.
Python3
# Converting integer to string and using subscript notation> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Вихід
4>
Перевірте типи змінних
Нам потрібно переконатися, що змінна, яку ми використовуємо, має очікуваний тип. Якщо це має бути послідовність (рядок або список), переконайтеся, що їй помилково не присвоєно ціле значення.
java кольори
Python3
# Checking variable type before using subscript notation> number>=> 42> if> isinstance>(number, (>str>,>list>)):> >print>(number[>0>])> else>:> >print>(> >f>'Error: Variable type '{type(number).__name__}' is not subscriptable.'>)> |
>
>Вихід
Error: Variable type 'int' is not subscriptable.>
Перегляньте логіку коду
Перевірте логіку свого коду, щоб визначити, чи справді потрібне підрядкове позначення. Якщо ні, перегляньте код, щоб уникнути індексування цілих чисел.
Python3
# Reviewing code logic to avoid subscripting integers> number>=> 42> number_str>=> str>(number)> print>(number_str[>0>])> |
>
>Вихід
4>
Висновок
З наведеної вище інформації можна сказати TypeError : «int» object is not subscriptable error у Python зазвичай виникає через невідповідність типу, коли ціле число помилково розглядається як об’єкт з індексом, наприклад список або кортеж. Тому, щоб запобігти цьому, дуже важливо постійно перевіряти типи даних, особливо коли ви маєте справу з динамічними або складними структурами даних.