Почему моя функция возвращает None, хотя я считаю результат?
Написал функцию, которая складывает числа, печатаю её результат — а выводится None. Внутри функции всё считается правильно! Почему функция возвращает None и как сделать, чтобы она отдавала значение?
2 ответа
Если функция возвращает None, почти всегда причина одна: в ней нет return (или он не выполняется). Любая функция без явного return отдаёт None — это значение «ничего».
Ошибка — посчитали, но не вернули:
def add(a, b):
result = a + b
print(result) # печатает, но не возвращает
x = add(2, 3)
print(x) # None
Исправление — вернуть значение:
def add(a, b):
return a + b
x = add(2, 3)
print(x) # 5
Важно понимать разницу: print показывает значение на экране, а return отдаёт его обратно в программу. Это не одно и то же. Если внутри функции только print, то наружу всё равно уходит None.
Другие причины None:
returnстоит с неправильным отступом — внутриif, который не сработал, поэтому до него не дошли.- Лишний перевод строки: написали
returnотдельно, без значения после него. - Вернули результат метода, который сам возвращает None (
return lst.sort()).
Правило: функция, от которой вам нужен результат, обязана return это значение.
Частая ловушка с условиями: return есть только в одной ветке.
def check(n):
if n > 0:
return "плюс"
# если n <= 0 — функция молча вернёт None
Добавьте return для всех случаев (например, else: return "минус"), иначе при некоторых входных данных получите None.