← Все вопросы

AttributeError: object has no attribute — что значит эта ошибка?

Задан 6 месяцев назад1.4к просмотров2 ответа
8

Вызываю метод, например text.apend('!'), а Python пишет AttributeError: 'str' object has no attribute 'apend'. Что такое attribute и почему его «нет»? Как понять, в чём дело?

2 ответа

11
✓ Принятый ответ — помог автору

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

Самые частые причины:

  1. Опечатка в названии метода (apend вместо append):
nums = [1, 2]
nums.apend(3)   # AttributeError: 'list' object has no attribute 'apend'

Исправление — nums.append(3).

  1. Метод есть у другого типа. Например, у строк нет .append() (это метод списков), а у списков нет .upper() (это для строк):
text = "привет"
text.append("!")   # ошибка, строки неизменяемы
text = text + "!"   # правильно для строк
  1. Переменная оказалась None. result.strip() при result = None даст 'NoneType' object has no attribute 'strip' — значит выше функция вернула None.

  2. Перепутали имя модуля и его функции: random.randInt() вместо random.randint().

Диагностика: посмотрите на тип в сообщении ('str', 'list', 'NoneType'), затем проверьте написание метода. Если тип NoneType — ищите, откуда взялся None.

4

Полезный приём: выполните print(type(x)) прямо перед падающей строкой. Очень часто оказывается, что объект совсем не того типа, что вы думали (например, None или строка вместо списка). Сообщение 'NoneType' object has no attribute ... — почти всегда сигнал «функция выше забыла вернуть значение».

Ваш ответ

Войдите, чтобы ответить на вопрос.