Почему функция выводит none в Python?
4 года назад
Andrey Moshkov
Ответы
Достаточно часто возникают вопросы: "почему моя функция ничего не возвращает?!", "почему из функции возвращается None?", "не могу понять откуда появляется None...".
Для начала необходимо понимать и помнить, что любая функция в Python всегда что-то возвращает и если не используется оператор return для возврата значения (такие случаи бывают, но об этом позднее), то функция возвращает объект None. В случае если return используется, но после него ничего не указывается явно, то по умолчанию считается, что там стоит объект None.
Порой бывает, что по ошибке указывается возврат вместе с функцией print(). Для информации функция print() в Python выводит переданные аргументы на стандартное устройство вывода (экран), но при этом не возвращает значений, т.е. можно считать, что возвращает None.
Если дальше по коду проводятся манипуляции с переменной b, например сложение, то возникнет ошибка TypeError:
Возможен вариант, когда функция и не должна ничего возвращать, она производит какие-либо действия с объектами в глобальной зоне видимости и на этом ее функционал заканчивается. В таком случае return может и не использоваться, но необходимо помнить, что в этом случае функция возвращает None.
В примере выше использовался метод работы со списками extend() и необходимо понимать, что метод изменяет объект, к которому применен, а не возвращает результат изменения объекта.
4 года назад
Дмитрий Ибрагимов
Функция возвращает None, если в ней нет return или return не сработал. Чаще всего print() внутри функции путают с return:
print() показывает значение, а функция без return возвращает None. Исправление — вернуть результат:
Частые причины
print от функции, которая сама печатает. print(add(2, 3)) выведет сначала 5 изнутри функции, затем None — результат функции.
return только в одной ветке:
Добавьте return для всех случаев.
Методы, которые меняют объект на месте:
sort(), append(), reverse(), update() меняют список или словарь и возвращают None. Не присваивайте их результат. Если нужен новый отсортированный список — sorted(numbers).
Рекурсия без return:
Для factorial(3) будет уже ошибка TypeError: unsupported operand type(s) for *: 'int' and 'NoneType': внутренний вызов вернул None, и его попытались умножить на число. Такая ошибка — частый признак забытого return.
Как найти место
Добавьте print перед каждым return или пройдите функцию отладчиком. Если программа дошла до конца функции, а return не встретился, Python вернёт None.
Функции и возврат значений разбирают в бесплатном курсе «Основы Python».
10 дней назад
Никита Вихров
Похожие вопросы






