Понимание системы типов Python является ключом к решению этой сложной ошибки.

Пытаетесь получить данные из объекта и вместо этого видите ошибку «объект не подлежит подписке»? Проблема в том, что вы индексируете неправильный тип данных.

Узнайте все о подписных типах и о том, как устранить эту ошибку.

Что означает «Подписка» в Python?

Термин «подписываемый» в Python означает тип данных, в котором хранится несколько значений, к которым вы можете обращаться по отдельности. Вы можете получить доступ к определенному значению из типа данных с подпиской через его индекс, используя нотацию с квадратными скобками ([]).

Если вы попытаетесь получить доступ к элементам в типе данных, который не индексируется, Python вызовет исключение «TypeError: объект не подлежит подписке».

Следующие типы данных могут быть подписаны в Python: списки, строки, кортежи и словари.

список_пример = [1, 3, 5, "Идову"]
строка_пример = "Идову Омисола"
tuple_example = (1, 3, 5, "Идову")
dict_example = {"имя": "Идову", "Язык": "Йоруба"}
instagram viewer

печать (список_пример[0]) # 1
печать (string_example[3]) # ш
печать (tuple_example[1]) # 3
печать (dict_example["имя"]) # Идову

Однако наборы, целые числа, числа с плавающей запятой и логические значения недоступны через индексацию, поэтому они не могут быть подписаны:

float_example = 12.45
int_example = 12367
bool_example = Истинный
set_example = {1, 3, 5, "Питон"}

печать (float_example[1])
печать (bool_example[2])
печать (int_example[2])
печать (set_example[2])

Попытка запустить каждый из этих операторов выводит исключение «объект не подлежит подписке»:

Разрешение исключения

Разрешить исключение «объект не подлежит подписке» будет проще, если вы поймете правила доступа к каждому типу данных. Итак, начните отладку Python с проверки типа данных объекта, который вы пытаетесь проиндексировать.

float_example = 12.45
int_example = 12367
bool_example = Истинный
set_example = {1, 3, 5, "Питон"}

печать (тип (float_example)) #
печать (тип (int_example)) #
печать (тип (bool_example)) #
печать (тип (set_example)) #

Как только вы определите, что тип данных не является индексируемым, преобразование его в индексируемый тип решит проблему. Это удобно, если данные из сторонний API. Преобразование таких типов данных, как integer, float и Boolean, в строку делает их доступными для подписки:

распечатать (str (float_example) [:2]) # 12
распечатать (ул (int_example)[:2]) # 12
распечатать (ул (bool_example)[:2]) # Тр

Вы можете даже манипулировать полученными строками Python как пожелаете. Если вы имеете дело с целым числом и числом с плавающей запятой, вы можете захотеть сохранить исходный тип данных в выходных данных. Для этого преобразуйте полученное значение в исходный тип данных после их индексации в виде строк:

convert_float = float (str (float_example)[:2])
convert_int = int (str (int_example)[:2])

# 12.0 Тип данных:
печать (converted_float, f'Тип данных:{тип (converted_float)}')

# 12 Тип данных:
печать (converted_int, f'Тип данных:{тип (converted_int)}')

Что касается набора, вы можете преобразовать его в список. Хотя вы можете преобразовать заданный объект в список, используя список (набор) Однострочный Python, это не сохраняет позиции элементов в результирующем списке. Чтобы убедиться, что вы получите список с сохраненными позициями элементов, используйте лямбда-функцию Python следующим образом:

set_example = {1, 3, 5, "Питон"}
преобразовано = отсортировано (set_example, ключ =лямбда х: (экземпляр (х, ул), х))

печать (преобразованная[3]) # Питон

Мастер отладки Python

Python имеет плавную кривую обучения. Но простые исключения могут сбить вас с толку, если вы не знаете, как с ними справиться. Умение отлаживать свой код и уделять время решению проблем имеет большое значение для исправления ошибок и исключений кода Python.