Автор оригинала: Shubham Sayon.
Python поднимает
Типерр: Объект не подписан
Если вы попытаетесь использовать индексирование на объекте, который не подписан. Чтобы исправить это, вы можете:- Typast или оберните не подписанный объект к подписанному объекту, как строка, список, кортеж или словарь или,
- Удалить указатель вызова или
- Перезаписать
__getitem__
Метод в вашей программе.
✍ Обзор
Проблема: Как исправить ” Типеррера:” INT ‘Объект не подписан “в Python?
Пример:
number = int(input("Enter a number: ")) print("reversed num = ", number[::-1])
Выход:
Enter a number: 123 Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 2, inprint("reversed num = ", number[::-1]) TypeError: 'int' object is not subscriptable
Вы столкнулись с этой глупой ошибкой? Have you encountered this stupid error? 😒
Если ваш ответ да, то вы не одиноки. Это одна из наиболее распространенных ошибок в Python, а тысячи программистов, как вы столкнулись с этой ошибкой в многочисленных проектах каждый месяц. В этом уроке вы узнаете именно, почему эта ошибка возникает, как это исправить, и как никогда больше не принять ту же ошибку. Итак, без дальнейшей задержки, давайте начнем.
◈ Типеррера: «INT» объект не подписан
Прежде чем понять, что вышеупомянутое Типеррор
средства и причина его возникновения; Давайте погрузиться в важный вопрос, связанный с TypeError: «INT» объект не подписан
Отказ
📌 Что объект не подписывает среднее значение в Python?
В Python, когда один объект может содержать другой объект, это подписан Отказ In Python, when one object can contain another object, it is subscriptable .
In simple terms, subscriptable objects. Thus Strings
, tuples
, lists
, and dictionaries are subscriptable
📜 Note: In Python, subscriptable objects implement the __getitem__()
method. However, non-subscriptable objects like sets
, integers
, etc., do not have the __getitem__
attribute. Примечание:
Пример:
my_list = ['Python', 'Java', 'Golang'] my_set = {'Python', 'Java', 'Golang'} my_integer = 100 print("Is list subscriptable? ", hasattr(my_list, '__getitem__')) print("Is set subscriptable? ", hasattr(my_set, '__getitem__')) print("Is integer subscriptable? ", hasattr(my_integer, '__getitem__'))
Выход:
Is list subscriptable? True Is set subscriptable? False Is integer subscriptable? False
Поэтому из приведенного выше примера ясно, что Целочисленный объект не подписан в Python Therefore, it is clear from the above example that an integer object is not subscriptable in Python
📌 Что вызывает TypeError: «INT» объект не подписан?
- Не подписанные объекты не индексируются, как список, кортеж или строка. Как только вы пытаетесь реализовать индексацию на объектах, которые не подписаны, вы столкнетесь
Типерр: Объект не подписан
- В качестве целочисленного объекта не является подписку, таким образом, если вы попытаетесь использовать индекс целочисленного объекта, то Python выброс следующую ошибку:
TypeError: «INT» объект не подписан
Отказ
Таким образом, в приведенном выше примере, когда мы пытались получить доступ к индексу целого числа, а затем отменить его, Python поднял – TypeError: «INT» объект не подписан
Отказ
Итак, как мы исправим эту ошибку? 🤔 Давайте посмотрим на методы, чтобы исправить/избежать таких ошибок.
🖋️ Решение 1: Tycast Целомерный объект к строкому объекту
Вы можете исправить ошибку, просто преобразовав ввод целочисленного пользователя в строку. Есть два способа выполнения этой задачи:
- Вы можете напрямую принять пользователь ввод в качестве строки вместо целого числа. Однако мы не будем следить за этим методом, потому что это условие может варьироваться в зависимости от требований.
- Второй способ получения типов пользовательского ввода от целого числа к строке – использовать встроенный str () Метод в Python.
number = int(input("Enter a number: ")) rev = str(number) print("reversed num = ", rev[::-1])
Выход:
Enter a number: 123 reversed num = 321
🖋️ Решение 2: переопределение __getitem__
Еще одна работа – вокруг нашей проблемы – перезаписать __getitem__
метод, который занимает один (индекс) аргумент Another work-around to our problem is to overwrite the __getitem__
method that takes one (index) argument i
(in addition to the obligatory self
argument) and returns the
class Rev: def __getitem__(self, i): return str(i)[::-1] obj = Rev() number = int(input("Enter a number: ")) print(obj[number])
Выход:
Enter a number: 123 321
Объяснение: В нашем случае мы перезаписываем __getitem__
Способ просто вернуть пользователь ввод в виде строки, обратившись на его индекс.
В Python, Объект не подписан
Ошибка возникает в многочисленных сценариях. Следовательно, давайте посмотрим на некоторые другие сценарии, которые приводят к возникновению подобного Типеррор
Отказ
⚠️ TypeError: ‘NoneType’ object is not subscriptable ️ TypeError: объект «NONETYPE» не подписан
Следующий фрагмент кода показывает минимальный пример, который приводит к ошибке:
variable = None print(variable[0]) # TypeError: 'NoneType' object is not subscriptable
Причина ошибки: Вы установили Переменная
до стоимости Reason of Error: You set the
variable to the value None
Решение:
print("Method 1: Wrap the Non-Indexable values in a list") variable = [None] print("Output: ", variable[0]) print() print("Method 2: Overwrite __getitem__") class X: def __getitem__(self, i): return f"Value {i}" variable = X() print(variable[0])
Выход:
Method 1: Wrap the Non-Indexable values in a list Output: None Method 2: Overwrite __getitem__ Value 0
⚠️ TypeError: ‘builtin_function_or_method’ object is not subscriptable ️ TypeError: «STOVITIN_FUCTING_OR_METHOD» не подписан
Пример:
def foo(li): if li.pop['Subject'] == 'Physics': print("Every action has an equal and opposite reaction.") list1 = [{'Subject': 'Physics', 'Name': 'Newton'}, {'Subject': 'Maths', 'Name': 'Ramanujan'}, {'Subject': 'Economics', 'Name': 'Smith'}] foo(list1)
Выход:
Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 9, infoo(list1) File "D:/PycharmProjects/PythonErrors/rough.py", line 2, in foo if li.pop['Subject']=='Physics': TypeError: 'builtin_function_or_method' object is not subscriptable
Решение:
Хотя li.pop
является действительным выражением в Python, что приводит к ссылке на поп
Метод, но в этом случае он на самом деле не вызывает этот метод. Вам нужно добавить открытые и закрывать скобки, чтобы вызвать метод, как показано ниже.
def foo(li): if li.pop(0)['Subject'] == 'Physics': print("Every action has an equal and opposite reaction.") list1 = [{'Subject': 'Physics', 'Name': 'Newton'}, {'Subject': 'Maths', 'Name': 'Ramanujan'}, {'Subject': 'Economics', 'Name': 'Smith'}] foo(list1) # Output --> Every action has an equal and opposite reaction.
⚠️ Типеррера: «Набор» объект не подписан
Следующий фрагмент кода показывает минимальный пример, который приводит к ошибке:
my_set = {111, 222, 333} print(my_set[2]) # TypeError: 'set' object is not subscriptable
Причина: Установить
не является подписанным объектом в Python. Следовательно, вы не можете получить доступ к своим элементам, используя свой индекс.
Решение:
- Преобразовать набор в список или,
- Перезаписать метод __getitem__.
my_set = {111, 222, 333} # Method 1 my_list = list(my_set) print("Method 1 Output: ", my_list[2]) # Method 2 class Convert: def __getitem__(self, i): return [*i, ][2] obj = Convert() print("Method 2 Output: ", obj[my_set])
Выход:
Method 1 Output: 111 Method 2 Output: 111
Вывод
Вот некоторые рекомендуемые статьи, которые могут помочь вам в дальнейшем:
- Настоятельно рекомендуется: Доступ к индексу по величинам в Python
- Индексирование в Python
- Нарезание в Питоне
Я надеюсь, что эта статья помогла вам. Пожалуйста, Подписаться и Оставайтесь в курсе Для более захватывающих статей в будущем. Счастливое обучение! I hope this article helped you. Please
- Вы хотите быстро освоить самые популярные Python IDE?
- Этот курс приведет вас от новичка к эксперту в Пычарме в ~ 90 минут.
- Для любого разработчика программного обеспечения имеет решающее значение для освоения IDE хорошо, писать, тестировать и отлаживать высококачественный код с небольшим усилием.
Присоединяйтесь к Pycharm MasterClass Сейчас и мастер Pycharm на завтра!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @: