← Все вопросы
Как заметить, что функция случайно возвращает None, а я забыл написать return?
9
Написал функцию, которая считает сумму, но при вызове получаю None вместо числа:
def total(nums):
s = 0
for n in nums:
s += n
print(s)
x = total([1, 2, 3]) + 10 # TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Как вообще ловить такие случаи, когда функция отдаёт None, потому что я забыл return?
3 ответа
20
✓ Принятый ответ — помог автору
Это классика: функция без явного return всегда отдаёт None. У тебя стоит print(s), а нужно return s — печать выводит число на экран, но наружу из функции ничего не возвращается, поэтому в x попадает None.
def total(nums):
s = 0
for n in nums:
s += n
return s # вот это забыли
Как ловить заранее:
- Симптом —
TypeError: ... 'NoneType' ...при попытке использовать результат. Раз функция должна что-то отдавать, а получаешь None — почти наверняка пропущенreturn. - Не путай
printиreturn:printпоказывает,returnвозвращает значение для дальнейшего использования. - Линтер (pylint/ruff) и type-checker нередко подсвечивают функцию, которая по одной ветке возвращает значение, а по другой проваливается в неявный
None.
Ольга Литвинова Если return нужен только в части веток if — проверь, что во ВСЕХ ветках он есть · 11 месяцев назад
Nikita Hook Самая частая ошибка новичков — поставить print вместо return · 11 месяцев назад
7
У тебя print(s) вместо return s. Без return функция возвращает None — отсюда и NoneType в ошибке.
4
Замени print(s) на return s.
Ваш ответ
Войдите, чтобы ответить на вопрос.