Автор оригинала: Chris.
Вы встречаете эту глупую ошибку?
Вы не одиноки – тысячи кодировщиков, как вы генерируете эту ошибку в тысячах проектов каждый один месяц. Этот короткий учебник покажет вам именно, почему эта ошибка возникает, как это исправить, и как никогда больше не принимать ту же ошибку. Итак, давайте начнем!
Python бросает Объект типа DypeError не подписан
Если вы используете индексацию с помощью квадратной обозначения кронштейна на объекте, который не индексируется. Это так, если объект не определяет __getitem __ ()
метод. Вы можете исправить это, удалив вызов индексации или определить __getitem__
метод.
Следующий фрагмент кода показывает минимальный пример, который приводит к ошибке:
variable = None print(variable[0]) # TypeError: 'NoneType' object is not subscriptable
Вы установили Переменная
к значению Нет
Отказ Ценность Нет
не является объектом контейнера, он не содержать другие объекты. Итак, код действительно не имеет никакого смысла – какой результат вы ожидаете от операции индексации?
Упражнение Перед тем, как я покажу вам, как это исправить, попробуйте разрешить ошибку себя в следующей интерактивной оболочке:
Если вы боретесь с индексацией в Python, посмотрите на следующие статьи на блог Finxter – особенно третий!
Статьи по Теме:
- Индексирование в Python
- Нарезание в Питоне
- Настоятельно рекомендуется: Доступ к индексу по величинам в Python
Обратите внимание, что возникает аналогичная проблема, если вы устанавливаете переменную в целочисленное значение 42
вместо Нет
ценить. Единственное отличие состоит в том, что сообщение об ошибке сейчас «Типерррез:« INT »объект не подписан«
» Отказ
Вы можете исправить Не подписанный тип Dymerror путем упаковки ненадлежаемых значений в тип данных контейнера, например Список В Python:
variable = [None] print(variable[0]) # None
Выход теперь это значение Нет
И скрипт больше не бросает ошибку.
Альтернатива – определить __getitem__
Метод в вашем коде:
class X: def __getitem__(self, i): return f"Value {i}" variable = X() print(variable[0]) # Value 0
Вы перезаписываете __getitem__
метод, который занимает один (индекс) аргумент i
(в дополнение к обязательной я
аргумент) и возвращает Я
-место “контейнера”. В нашем случае мы просто вернем строку «Значение 0»
для элемента Переменная [0]
и «Значение 10»
Для элемента Переменная [10]
Отказ Здесь не имеет большого смысла, но это минимальный пример, который показывает, как это работает.
Я надеюсь, что вы сможете исправить ошибку в вашем коде! Прежде чем идти, проверьте наш Бесплатные Python Cheat Steets Это научит вам основы в Питоне в минимальное время:
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.