
Выяснить, что означают сообщения об ошибках Python, может быть довольно сложно, когда вы впервые изучаете язык. Вот список распространенных ошибок, которые приводят к сообщениям об ошибках во время выполнения, которые могут привести к сбою вашей программы.
1) Пропуск “:” после оператора
if, elif, else, for, while, class или def. (Сообщение об ошибке: “SyntaxError: invalid syntax”)Пример кода с ошибкой:
if spam == 42
print('Hello!')2) Использование
= вместо ==. (Сообщение об ошибке: “SyntaxError: invalid syntax”)= является оператором присваивания, а == является оператором сравнения «равно». Пример кода с ошибкой:
if spam = 42:
print('Hello!')3) Использование неправильного количества отступов. (Сообщение об ошибке: «
IndentationError: unexpected indent» и «IndentationError: unindent does not match any outer indentation level» и «IndentationError: expected an indented block»)Помните, что отступ увеличивается только после оператора, оканчивающегося на “
:” двоеточие, и впоследствии должен вернуться к предыдущему отступу. Пример кода с ошибкой:
print('Hello!')
print('Howdy!')… еще:
if spam == 42:
print('Hello!')
print('Howdy!')… еще:
if spam == 42:
print('Hello!')4) Забыть вызвать
len() в операторе цикла for. (Сообщение об ошибке: “TypeError: 'list' object cannot be interpreted as an integer”)Обычно вы хотите перебирать индексы элементов в списке или строке, что требует вызова функции
range(). Просто не забудьте передать возвращаемое значение len(someList) вместо передачи только someList.Пример кода с ошикой:
spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])(UPD: как некоторые указали, вам может понадобиться только
for i in spam: вместо приведенного выше кода. Но вышесказанное относится к очень законному случаю, когда вам нужен индекс в теле цикла, а не только само значение.)5) Попытка изменить строковое значение. (Сообщение об ошибке: “
TypeError: 'str' object does not support item assignment”)Строки являются неизменным типом данных. Пример кода с ошибкой:
spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)Пример правильного варианта:
spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)6) Попытка объединить не строковое значение в строковое значение. (Сообщение об ошибке:
“TypeError: Can't convert 'int' object to str implicitly”)Пример кода с ошибкой:
numEggs = 12
print('I have ' + numEggs + ' eggs.')
Правильный вариант:
numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')
… или:
numEggs = 12
print('I have %s eggs.' % (numEggs))7) Пропуск кавычки, в начале или конце строкового значения. (Сообщение об ошибке:
“SyntaxError: EOL while scanning string literal”)Пример кода с ошикой:
print(Hello!')
… еще:
print('Hello!)
...еще:
myName = 'Al'
print('My name is ' + myName + . How are you?')8) Опечатка в переменной или имени функции. (Сообщение об ошибке:
“NameError: name 'fooba' is not defined”)Пример кода с ошибкой:
foobar = 'Al'
print('My name is ' + fooba)
...еще:
spam = ruond(4.2)
...еще:
spam = Round(4.2)9) Опечатка в названии метода. (Сообщение об ошибке:
“AttributeError: 'str' object has no attribute 'lowerr'”)Пример кода с ошибкой:
spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()10) Выход за пределы массива. (Сообщение об ошибке:
“IndexError: list index out of range”)Пример кода с ошибкой:
spam = ['cat', 'dog', 'mouse']
print(spam[6])
11) Использование несуществующего ключа словаря. (Сообщение об ошибке:
“KeyError: 'spam'”)Пример кода с ошибкой:
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])12) Попытка использовать ключевые слова Python в качестве переменной (Сообщение об ошибке:
“SyntaxError: invalid syntax”)Ключевые слова Python (также называются зарезервированные слова) не могут быть использованы для названия переменных. Ошибка будет со следующим кодом:
class = 'algebra'Ключевые слова Python 3:
and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield13) Использование расширенного оператора присваивания для новой переменной. (Сообщение об ошибке:
“NameError: name 'foobar' is not defined”)Не думайте, что переменные начинаются со значения, такого как
0 или пустая строка. Выражение с расширенным оператором как spam += 1 эквивалентно spam = spam + 1. Это означает, что для начала в spam должно быть какое-то значение.Пример кода с ошибкой:
spam = 0
spam += 42
eggs += 4214) Использование локальных переменных (с таким же именем как и у глобальной переменной) в функции до назначения локальной переменной. (Сообщение об ошибке:
“UnboundLocalError: local variable 'foobar' referenced before assignment”)Использовать локальную переменную в функции, имя которой совпадает с именем глобальной переменной, довольно сложно. Правило таково: если переменной в функции когда-либо назначается что-то, она всегда является локальной переменной, когда используется внутри этой функции. В противном случае, это глобальная переменная внутри этой функции.
Это означает, что вы не можете использовать ее как глобальную переменную в функции до ее назначения.
Пример кода с ошибкой:
someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()15) Попытка использовать
range() для создания списка целых чисел. (Сообщение об ошибке: “TypeError: 'range' object does not support item assignment”)Иногда вам нужен список целочисленных значений по порядку, поэтому
range() кажется хорошим способом создать этот список. Однако вы должны помнить, что range() возвращает «объект диапазона», а не фактическое значение списка.Пример кода с ошибкой:
spam = range(10)
spam[4] = -1
То что вы хотите сделать, выглядит так:
spam = list(range(10))
spam[4] = -1
(UPD: Это работает в Python 2, потому что Python 2's
range() возвращает список значений. Но, попробовав сделать это в Python 3, вы увидите ошибку.)16) Нет оператора
++ инкремента или -- декремента. (Сообщение об ошибке: “SyntaxError: invalid syntax”)Если вы пришли из другого языка программирования, такого как C++, Java или PHP, вы можете попытаться увеличить или уменьшить переменную с помощью
++ или --. В Python таких операторов нет.Пример кода с ошибкой:
spam = 0
spam++
То что вы хотите сделать, выглядит так:
spam = 0
spam += 117) UPD: как указывает Luchano в комментариях, также часто забывают добавить
self в качестве первого параметра для метода. (Сообщение об ошибке: «TypeError: TypeError: myMethod() takes no arguments (1 given)»)Пример кода с ошибкой:
class Foo():
def myMethod():
print('Hello!')
a = Foo()
a.myMethod()Краткое объяснение различных сообщений об ошибках приведено в Приложении D книги «Invent with Python».

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:
- Курс «Профессия Data Scientist» (24 месяца)
- Курс «Профессия Data Analyst» (18 месяцев)
- Курс «Python для веб-разработки» (9 месяцев)
qark