← Все вопросы

AttributeError: 'NoneType' object has no attribute — откуда NoneType?

Задан 6 месяцев назад1.3к просмотров3 ответа
16
result = my_list.sort()
result.append(5)

Получаю AttributeError: 'NoneType' object has no attribute 'append'. Откуда тут None, я же со списком работаю?

3 ответа

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

.sort() сортирует список на месте и возвращает None. Поэтому result — это None, а не список.

Классическая ловушка: методы, которые меняют объект «на месте», возвращают None, а не сам объект. Сюда же .append(), .reverse(), .update() у словаря.

my_list.sort()        # просто сортируем сам список
my_list.append(5)     # и дальше работаем с ним
# а если нужна КОПИЯ отсортированного — sorted():
result = sorted(my_list)

Вообще 'NoneType' object has no attribute ... почти всегда значит: переменная, к которой ты обращаешься через точку, оказалась None. Ищи, где она присваивается, — скорее всего функция/метод вернул None (или функция без return вообще).

Оксана Баранова вот это засада с sort(), спасибо! перешёл на sorted() · 5 месяцев назад
Семен Протапопов автор: то что надо, принято ✅ · 5 месяцев назад
6

Метод вернул None, а ты от него зовёшь .append.

5

Используй sorted(my_list), оно возвращает новый список.

Ваш ответ

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