Чтение ошибок
Ошибки — обычная часть программирования. Даже опытные программисты делают их каждый день. Важно быстро находить и исправлять их, и в этом помогают сообщения об ошибках.
Когда Python не может выполнить вашу программу, он показывает красное сообщение об ошибке под выводом. Например, в этой программе опечатка во второй строке:
price = 120
print(pirce)Python останавливается с таким сообщением:
Traceback (most recent call last):
File "<exec>", line 2, in <module>
NameError: name 'pirce' is not defined. Did you mean: 'price'?Оно может выглядеть пугающе, но читать его просто, если начать с конца:
- Последняя строка говорит, что пошло не так. До двоеточия стоит тип ошибки, здесь
NameError. После двоеточия — описание: имяpirceне определено, поэтому Python его не знает. Иногда Python даже предлагает исправление:Did you mean: 'price'? - Строка выше говорит, где произошла ошибка:
line 2.File "<exec>"иin <module>лишь означают, что это в вашей программе, так что их можно пропустить. - Первая строка,
Traceback (most recent call last), — просто заголовок: то, что идёт дальше, прослеживает ошибку до места, где она произошла.
SyntaxError выглядит немного иначе. Он означает, что код нарушает правила записи Python, его синтаксис. Обычно пропущена кавычка или скобка:
print("Привет"Python останавливается с таким сообщением:
Traceback (most recent call last):
File "<exec>", line 1
print("Привет"
^
SyntaxError: '(' was never closedPython показывает строку с ошибкой и отмечает место знаком ^: здесь это скобка, которая так и не закрыта. Пропущенная кавычка даёт SyntaxError: unterminated string literal (detected at line 1): текст (строка), который не заканчивается. Python проверяет всю программу перед запуском, поэтому при синтаксической ошибке не выполняется ничего, даже строки до ошибки.
Ещё две ошибки встречаются часто:
NameError: вы использовали имя, которого Python не знает. Обычно это опечатка (pirceвместоpriceилиPrice, ведь заглавные и строчные буквы различаются), переменная, использованная до создания, или текст без кавычек:print(Анна).TypeError: вы попытались сделать то, что тип значения не позволяет, например соединить строку и число:"5" + 3.
При NameError или TypeError программа работает до ошибки, а потом останавливается. То, что она успела вывести, остаётся в выводе. Это полезная подсказка: ошибка находится после последнего print(), который ещё что-то вывел.
Когда получаете ошибку, сначала прочитайте последнюю строку, затем найдите строку, которую она называет, и исправьте ошибку. Потом запустите программу снова: дальше может быть ещё одна ошибка.
Задание
- 1
В программе в редакторе три ошибки. Запустите её, прочитайте сообщение об ошибке, исправьте ошибку и запустите программу снова. Повторяйте, пока программа не выведет:
Игрок: Анна Очки: 10 Очки после бонуса: 15