TypeError (Python и JavaScript)
Коротко: Значение не имеет типа, который требует операция, например текст плюс число или вызов того, что не является функцией.
Подробнее: TypeError возникает, когда операция или функция получает значение неверного типа. Сообщение обычно говорит, какой тип ожидался и что было на самом деле.
Подробности
Типичные сообщения
Python
TypeError: can only concatenate str (not "int") to str: текст и число соединены через+.TypeError: 'NoneType' object is not subscriptable:x[0]применено кNone.TypeError: 'int' object is not callable: переменная перезаписала имя функции.TypeError: f() takes 1 positional argument but 2 were given.
JavaScript
TypeError: x is not a function: вызывается то, что не является функцией.TypeError: Cannot read properties of undefined (reading 'name'): доступ кundefined.TypeError: Assignment to constant variable: повторное присваивание переменнойconst.
Причины
- Отсутствующие данные (
None/undefined/null), потому что поиск ничего не нашёл или ответа нет. - Неверный тип данных из ввода (строки вместо чисел, например при
input()или формах). - Неверное число или порядок аргументов.
- Имена переменных затеняют функции (
list = [1,2], позжеlist(x)).
Решения
- Проверьте тип:
print(type(x))илиconsole.log(typeof x). - Преобразуйте:
int(text),str(number), f-строки (f"{a} and {b}"), шаблонные литералы в JS. - Проверяйте на None/undefined перед обращением (
if x is not None,x?.nameв JS). - Посмотрите номер строки в сообщении об ошибке и выведите значение перед ней.
- Не используйте имена функций для переменных. В TypeScript компилятор рано ловит многие такие ошибки.
См. также: Cannot read properties of undefined, ModuleNotFoundError, NullPointerException