NameError : name 'total' is not defined ссылка имя total не определено
Python встретил имя total, которому ещё ничего не присвоено в этом месте программы.
частые причины
Опечатка или другой регистр: Total и total это разные имена. Переменная создаётся ниже по коду или внутри другой функции. Текст написан без кавычек: print(привет) вместо print("привет"). Модуль не импортирован: math.sqrt(x) без import math. Функция вызвана раньше, чем объявлена через def. как починить
Найди, где total получает значение, и убедись, что это происходит раньше и в той же области видимости. Если Python предлагает похожее имя после «Did you mean», обычно это и есть опечатка.
было
name = input ()
print (nmae) стало
name = input ()
print (name) NameError и области видимости в справочнике
NameError ссылка ошибка имени
Python не нашёл имя, к которому обращается код.
частые причины
Опечатка в имени. Имя определено позже или в другой функции. как починить
Проверь написание и место, где имя получает значение.
NameError и области видимости в справочнике
UnboundLocalError : cannot access local variable 'count' where it is not associated with a value ссылка локальная переменная count используется до присваивания
Внутри функции переменной count где-то присваивается значение, поэтому Python считает её локальной. А читается она раньше, чем это присваивание выполнилось.
частые причины
count += 1 внутри функции, а count создан снаружи.Переменная присваивается только в одной ветке if, а читается после него. как починить
Передай значение параметром и верни результат через return. Если это счётчик, объяви global count в начале функции, но лучше обойтись без глобальных переменных.
было
count = 0
def bump ():
count += 1 стало
def bump (count):
return count + 1
count = bump ( 0 ) NameError и области видимости в справочнике
TypeError : 'int' object is not iterable ссылка объект типа int нельзя перебрать
В for, list(), sum() или распаковке оказалось одиночное значение типа int, а нужна коллекция или строка.
частые причины
Цикл по числу: for i in 5 вместо for i in range(5). Функция вернула None (нет return), а результат перебирают. В sum() или max() передано число вместо списка. как починить
Перебирай коллекцию или range(n). Если тип NoneType, проверь, что функция возвращает значение через return.
было
for i in 5 :
print (i) стало
for i in range ( 5 ):
print (i) TypeError и ValueError в справочнике
TypeError : argument of type 'int' is not iterable ссылка аргумент типа int нельзя перебрать
Оператор in справа требует строку, список или другую коллекцию, а стоит значение типа int.
частые причины
"7" in 2007: число вместо строки.Переменная перезаписана числом или None. как починить
Приведи значение к строке или списку: "7" in str(year).
стало
if "7" in str ( 2007 ): TypeError и ValueError в справочнике
TypeError : 'int' object is not subscriptable ссылка к объекту типа int нельзя обратиться по индексу
Квадратные скобки [...] применены к значению типа int, у которого нет элементов.
частые причины
Переменная перезаписана числом, а раньше была списком. Функция вернула None (тип NoneType): нет return или return без значения. Скобки перепутаны: func[1] вместо func(1). как починить
Проверь, что в переменной именно список, строка или словарь. Для NoneType найди функцию, которая должна была вернуть значение.
стало
digits = str ( 5 )
print (digits[ 0 ]) TypeError и ValueError в справочнике
TypeError : 'int' object is not callable ссылка объект типа int нельзя вызвать
После значения типа int стоят круглые скобки, а вызывать можно только функции и классы.
частые причины
Переменная названа как встроенная функция: sum = 0, а потом sum(items). Пропущен оператор: 2(x + 1) вместо 2 * (x + 1). Скобки перепутаны: items(0) вместо items[0]. как починить
Не называй переменные sum, list, max, str, input. Между числом и скобкой пиши *. Индекс бери квадратными скобками.
было
sum = 0
print ( sum ([ 1 , 2 ])) стало
total = 0
print ( sum ([ 1 , 2 ])) TypeError и ValueError в справочнике
TypeError : unsupported operand type(s) for +: 'int' and 'str' ссылка оператор + не поддерживает типы int и str
Python не умеет применять + к значениям типов int и str вместе.
частые причины
input() возвращает строку, а к ней прибавляют число.Один из операндов None: функция ничего не вернула. Складываются список и число. как починить
Приведи типы явно: int(input()) для чисел, str(n) для склейки текста.
было
age = input ()
print (age + 1 ) стало
age = int ( input ())
print (age + 1 ) преобразование типов в справочнике
TypeError : can only concatenate str (not "int") to str ссылка к str можно присоединить только str, а не int
Оператор + для str означает склейку, и второй операнд тоже должен быть str, а не int.
частые причины
Строка + число при выводе: "Возраст: " + 25. Список + одиночный элемент вместо append. как починить
Собирай текст f-строкой: f"Возраст: {age}". Элемент в список добавляй через append.
было
print ( "Возраст: " + 25 ) стало
print ( f "Возраст: { 25 } " ) TypeError и ValueError в справочнике
TypeError : '<' not supported between instances of 'str' and 'int' ссылка сравнение < не поддерживается между str и int
Сравнивать через < можно значения одного рода, а здесь str и int.
частые причины
Число из input() не приведено к int и сравнивается с числом. В списке смешаны строки и числа, и его сортируют. как починить
Приведи оба значения к одному типу до сравнения.
было
age = input ()
if age < 18 : стало
age = int ( input ())
if age < 18 : преобразование типов в справочнике
TypeError : greet() missing 1 required positional argument: 'name' ссылка при вызове greet() не хватает обязательных аргументов: 'name'
Функция greet объявлена с параметрами, а при вызове им не передали значения: не хватает 1.
частые причины
Функция вызвана без аргументов или с меньшим числом, чем в def. Метод класса вызван через класс, а не через объект. как починить
Передай значения для каждого параметра из def или задай параметрам значения по умолчанию.
было
def greet (name):
print ( "Привет," , name)
greet () стало
def greet (name):
print ( "Привет," , name)
greet ( "Аня" ) функции в справочнике
TypeError : greet() takes 1 positional argument but 2 were given ссылка greet() принимает 1 аргумента, а передано 2
В вызов greet передали больше значений, чем параметров в её объявлении.
частые причины
Лишний аргумент при вызове. В методе класса забыт параметр self: Python передаёт объект первым аргументом. как починить
Сверь вызов с def. Для метода класса первым параметром напиши self.
было
class Cat :
def meow ():
print ( "мяу" )
Cat (). meow () стало
class Cat :
def meow (self):
print ( "мяу" )
Cat (). meow () функции в справочнике
TypeError : object of type 'int' has no len() ссылка у объекта типа int нет длины
len() считает элементы строки, списка или словаря, а значение типа int из элементов не состоит.
частые причины
len(12345): длина числа. Сначала преврати его в строку.Переменная перезаписана числом или None. как починить
Для числа: len(str(n)). Иначе проверь, что в переменной коллекция.
стало
print ( len ( str ( 12345 ))) TypeError и ValueError в справочнике
TypeError : list indices must be integers or slices, not str ссылка индексы list должны быть целыми числами или срезами, а не str
К списку обратились как к словарю: в квадратных скобках стоит str, а список принимает только номер позиции.
частые причины
items["name"], хотя items это список словарей: сначала выбери элемент по номеру.В цикле for item in items внутри написано items[item]: item уже сам элемент. как починить
Обращайся к элементу списка по номеру или перебирай элементы напрямую.
было
for user in users:
print (users[user]) стало
for user in users:
print (user) списки в справочнике
TypeError : string indices must be integers, not str ссылка индексы строки должны быть целыми числами
К строке обратились по ключу, как к словарю. Строка отдаёт символы только по номеру.
частые причины
JSON прочитан как текст и не разобран через json.loads. В цикле по словарю перебираются ключи-строки, а код ждёт вложенные словари. как починить
Проверь, что в переменной словарь, а не строка: print(type(x)).
словари в справочнике
TypeError : 'str' object cannot be interpreted as an integer ссылка объект типа str нельзя использовать как целое число
Функция ждала целое число, а получила str. Чаще всего это range() со строкой из input().
частые причины
range(input()) без приведения к int.Дробное число там, где нужен индекс или счётчик. как починить
Приведи значение к целому: range(int(n)).
было
n = input ()
for i in range (n): стало
n = int ( input ())
for i in range (n): преобразование типов в справочнике
TypeError : int() argument must be a string, a bytes-like object or a real number, not 'list' ссылка аргумент int() должен быть строкой или числом, а не list
В int() передали значение типа list, а преобразовать в число можно только строку или число.
частые причины
int(input().split()): split вернул список, а int нужен каждому элементу.В int() попал None или целый список. как починить
Преобразуй элементы по одному: list(map(int, input().split())).
было
nums = int ( input (). split ()) стало
nums = list ( map ( int , input (). split ())) преобразование типов в справочнике
TypeError : must be str or None, not tuple ссылка нужна строка, а передан tuple
Метод строки ждал одну строку, а получил tuple. Например, split и strip принимают только строку-разделитель.
частые причины
text.split((",", ";")): несколько разделителей кортежем.В replace передан список вместо строки. как починить
Передавай одну строку. Несколько разделителей обрабатывай по очереди или через re.split.
было
parts = text. split (( "," , ";" )) стало
parts = text. replace ( ";" , "," ). split ( "," ) методы строк в справочнике
TypeError : sequence item 0: expected str instance, int found ссылка элемент 0: ожидалась строка, найден int
join склеивает только строки, а в списке на позиции 0 лежит int.
частые причины
", ".join(numbers) для списка чисел. как починить
Преобразуй элементы в строки: ", ".join(map(str, numbers)).
было
print ( ", " . join ([ 1 , 2 , 3 ])) стало
print ( ", " . join ( map ( str , [ 1 , 2 , 3 ]))) методы строк в справочнике
TypeError : Value after * must be an iterable, not int ссылка после * должна идти коллекция, а не int
Звёздочка в вызове распаковывает список или кортеж, а здесь после неё стоит int.
частые причины
print(*n), где n число, а не список. как починить
Распаковывай только коллекции: print(*items). Одиночное значение передавай как есть.
функции в справочнике
TypeError : 'list' object is not an iterator ссылка объект типа list не итератор
next() работает только с итератором, а list это коллекция: её сначала нужно превратить в итератор через iter().
частые причины
next(items) для списка.Функция-генератор вызвана без скобок или её результат перезаписан списком. как починить
Создай итератор: it = iter(items), затем next(it). Или просто перебирай через for.
было
items = [ 1 , 2 , 3 ]
print ( next (items)) стало
it = iter ([ 1 , 2 , 3 ])
print ( next (it)) генераторы в справочнике
TypeError : can't multiply sequence by non-int of type 'str' ссылка нельзя умножить последовательность на str
Умножение строки или списка работает только на целое число, а второй операнд типа str.
частые причины
Два значения из input() перемножаются как строки. Дробное число умножается на строку. как починить
Приведи оба операнда к числам: int(a) * int(b).
было
a = input ()
b = input ()
print (a * b) стало
a = int ( input ())
b = int ( input ())
print (a * b) преобразование типов в справочнике
TypeError : unhashable type: 'list' ссылка нехешируемый тип: list
Ключом словаря и элементом множества может быть только неизменяемое значение, а list изменяемый.
частые причины
Список использован как ключ словаря. Список добавлен в set. как починить
Замени список на кортеж: (x, y) вместо [x, y].
было
seen = {[ 1 , 2 ]: "пара" } стало
seen = {( 1 , 2 ): "пара" } изменяемые и неизменяемые типы
TypeError : 'str' object does not support item assignment ссылка объект типа str не поддерживает присваивание по индексу
Значение типа str нельзя менять по частям: строки и кортежи неизменяемы.
частые причины
s[0] = "A" для строки.Изменение элемента кортежа. как починить
Собери новое значение: s = "A" + s[1:]. Если нужны правки по индексу, работай со списком.
было
s = "привет"
s[ 0 ] = "П" стало
s = "привет"
s = "П" + s[ 1 :] изменяемые и неизменяемые типы
TypeError ссылка ошибка типа
Операция получила значение не того типа, который она умеет обрабатывать. Текст после двоеточия называет операцию и типы.
частые причины
Строка из input() там, где нужно число. None вместо значения: функция без return. Список вместо одиночного значения или наоборот. как починить
Выведи type() каждого участника операции и приведи типы явно.
TypeError и ValueError в справочнике
AttributeError : 'NoneType' object has no attribute 'append' ссылка у объекта None нет атрибута append
Переменная содержит None, а код зовёт у неё .append. None появляется, когда функция ничего не вернула.
частые причины
items = items.sort(): sort сортирует на месте и возвращает None.Своя функция без return. dict.get() не нашёл ключ. как починить
Не присваивай результат методов, которые меняют объект на месте (sort, append, reverse). Проверь, что функция возвращает значение.
было
items = items. sort ()
items. append ( 4 ) стало
items. sort ()
items. append ( 4 ) AttributeError в справочнике
AttributeError : module 'math' has no attribute 'sqr' ссылка в модуле math нет атрибута sqr
Модуль math импортирован, но имени sqr в нём нет.
частые причины
Опечатка в имени функции модуля. Свой файл назван как библиотека (random.py, math.py) и импортируется вместо неё. как починить
Проверь имя по документации модуля и переименуй свой файл, если он совпадает с библиотекой.
было
import math
print (math. sqr ( 16 )) стало
import math
print (math. sqrt ( 16 )) AttributeError в справочнике
AttributeError : 'list' object has no attribute 'push' ссылка у объекта типа list нет атрибута push
У значения типа list нет метода или поля push: либо опечатка в имени, либо в переменной не тот тип.
частые причины
Метод из другого языка: push, length, size. Опечатка: apend, lenght. Переменная оказалась строкой вместо списка или числом вместо объекта. как починить
Посмотри доступные методы: print(dir(x)). Для списка добавление это append, длина это len(x).
AttributeError в справочнике
AttributeError ссылка ошибка атрибута
Код обращается к полю или методу, которого у объекта нет.
частые причины
Опечатка в имени метода. Переменная другого типа, чем ожидалось. как починить
Проверь тип через type(x) и доступные имена через dir(x).
AttributeError в справочнике