В серии: Библиотека alt м. В. Сысоева, И. В. Сысоев


Download 0.87 Mb.
bet37/40
Sana23.04.2023
Hajmi0.87 Mb.
#1387407
TuriКнига
1   ...   32   33   34   35   36   37   38   39   40
Bog'liq
Боши Лекция Парадигма и методы программирование

3.4 Отладка программы


В большинстве случаев многие даже несложные программы, будучи написаны, работают не так, как предполагал автор. Возможно, вы уже убедились в этом при написании простеньких программ из предыдущей главы. Как минимум, у половины из вас появлялись синтаксические ошибки (забыли поставить скобочку или кавычку). В этом разделе после изучения таких сравнительно сложных конструкций, как циклы, количество ваших ошибок резко увеличится. Но расстраиваться не стоит. Нужно всегда помнить, что процесс написания программы состоит из двух этапов: кодирование (написание кода программы, занимает менее трети времени) и отладки (занимает более двух третей времени).

Рис. 3.1. Пример ошибки, выявляемой препроцессором.
Все ошибки можно условно разделить на следующие три категории, которые разберём на примере программы, считающей сумму квадратов целых чисел от 0 до N.

3.4.1 Ошибки, выявляемые препроцессором


В интерпретатор Python встроена специальная программа — препроцессор. У препроцессора несколько функций, в частности, он переводит текст программы в специальный байт-код, понятный для интерпретатора. В процессе перевода текста в байт-код препроцессор вынужден анализировать синтаксис вашей программы, для чего используется синтаксический анализатор, проверяющий ваш текст с целью понять, похож ли он на текст программы на Python по ряду формальных признаков. Если препроцессор не может понять смысл тех или иных символов в вашем тексте, он чаще всего указывает вам на ошибку типа (SyntaxError). При синтаксической ошибке возникает диалоговое окно, которое предотвращает запуск интерпретатора (рис. 3.1), так как нет смысла запускать то, что непохоже на программу.
Самый важный вид синтаксической ошибки с точки зрения препроцессора — это ошибка расстановки отступов, поскольку она нарушает всю структуру программы. Если вы попытаетесь запустить на исполнение вот такой код:
N = ( (’Введите N: ’)) s = 0 i (N):
s = s + i**2 s % 2 == 0:
(s)
то ничего не выйдет: вы получите сообщение unexpected indent — неожиданный отступ, и пробел перед ключевым словом for будет подсвечен красным. Исправить такую ошибку совсем несложно: нужно просто нормально расставить отступы в соответствии с логикою программы.
Ещё одна популярная ошибка на примере того же кода:

N = s = 0

(

(’Введите N: ’))

i




(N):

s = s + i**2
s % 2 == 0:
(s)
Интерпретатор выдаст: expected an indented block: нужен отступ для тех команд, которые лежат внутри цикла for и условного оператора if.
Бывает, что в результате опечаток возникают недопустимые с точки зрения интерпретатора выражения. Например, можно допустить следующую ошибку:
s = s + 2i
С точки зрения правил Python выражение 2i никогда не может возникнуть: имя переменной не может начинаться с цифры, а для интепретации 2 и i как разных сущностей между ними должен быть знак какой-нибудь арифметической или логической операции (чаще всего забывают знак умножения *, поскольку в математических выражениях он обычно опускается).
Чуть сложнее разобраться с другим подвидом синтаксических ошибок, вызванных неверною расстановкою скобок:
N = ( (’Введите N: ’) s = 0 i (N): s = s + i**2
(s)
Такой пример вызовет ошибку invalid syntax, причём укажет на символ s в начале второй строки, что может сбить вас с толку. На самом деле проблема в несоответствии числа открывающихся и закрывающихся скобок в предыдущей строке. Интерпретатор в поисках второй закрывающейся скобки дошёл до строки, следующей за тою, где совершена ошибка, и, поняв, что искать дальше бессмысленно (на новой строке по правилам её уже не может быть), выдал ошибку. При неверном числе скобок интерпретатор всегда выдаёт ошибку в начале следующей строки.

Download 0.87 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   40




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling