Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Python_самоучитель.pdf
Скачиваний:
1296
Добавлен:
29.03.2015
Размер:
835.6 Кб
Скачать

Ревизия: 226

Глава 1. Базовые понятия

 

 

 

Мы также можем записать программу в файл и использовать интерпретатор для того, чтобы ее выполнить. Такой файл называют сценарием или скриптом (от англ. script – сценарий). Например, используя текстовый редактор, создадим файл prog1.py со

следующим содержанием: print "Hello world!"

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

$ python prog1.py Hello world!

В других программных средах метод запуска программ может отличаться, но принцип вызова интерпретатора останется таким же.

Упражнение. Попробуйте изменить свою первую программу так, чтобы в ней появились синтаксические ошибки: сначала ошибка, связанная с нераспознанной синтаксической единицей (т.е. непонятным словом), а затем – с неправильной структурой программы (можно попробовать поменять местами синтаксические единицы).

Поэкспериментируйте.

§1.6. Что такое отладка?

Программирование – довольно сложный процесс, и вполне естественно, когда программист допускает ошибку. Так повелось, что программные ошибки называют «багами» (от англ. bug – жучок). В русскоязычной литературе это слово вы не встретите, но в сленге программистов оно используется достаточно часто наряду со словом «глюк». Процесс поиска и устранения ошибок в англоязычной литературе принято обозначать термином debugging, мы же будем называть его отладкой.

Существует три типа ошибок, которые могут возникнуть в программах:

синтаксические ошибки (syntax errors), ошибки выполнения (runtime errors) и семантические ошибки (semantic errors). Чтобы находить и исправлять их быстрее, имеет смысл научиться их различать.

§1.6.1. Синтаксические ошибки (syntax errors)

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

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

Даже если в вашей программе Питон найдет хотя бы незначительную опечатку, он тут же выведет сообщение о том, где он на нее наткнулся, и завершит работу. Такую программу он не сможет выполнить и поэтому отвергнет. В первые недели вашей практики разработки

17

Ревизия: 226

Глава 1. Базовые понятия

 

 

 

программ вы, скорее всего, проведете довольно много времени, разыскивая синтаксические ошибки. По мере накопления опыта вы будет допускать их все реже, а находить – все быстрее.

§1.6.2. Ошибки выполнения (runtime errors)

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

§1.6.3. Семантические ошибки (semantic errors)

Третий тип ошибок – семантические ошибки. Первым признаком наличия в вашей программе семантической ошибки является то, что она выполняется успешно, т.е. без исключительных ситуаций, но делает не то, что вы от нее ожидаете.

В таких случаях проблема заключается в том, что семантика написанной программы отличается от того, что вы имели в виду. Поиск таких ошибок – задача нетривиальная, т.к. приходится просматривать результаты работу программы и разбираться, что программа делает на самом деле.

§1.6.4. Процесс отладки

Старый глюк лучше новых двух. Народная программерская поговорка

Умение отлаживать программы является очень важным навыком для программиста. Процесс отладки требует больших интеллектуальных усилий и концентрации внимания, но это одно из самых интересных занятий.

Отладка очень напоминает работу естествоиспытателя. Изучая результаты своего предыдущего эксперимента, вы делаете некоторые выводы, затем в соответствии с ними изменяете программу, запускаете ее, и снова приступаете к анализу полученных результатов. Если полученный результат не совпадет с ожидаемым, то вам придется снова разбираться в причинах, которые повлекли за собой эти несоответствия. Если же ваша гипотеза окажется правильной, то вы сможете предсказать результат модификаций программы и на шаг приблизиться к завершению работы над ней или, быть может, это заставит вас еще больше уверовать в свое заблуждение.

Поэтому для проверки работоспособности программы не достаточно проверить ее один раз – нужно придумать все возможные наборы входных данных, которые могут как-то повлиять на устойчивость вашей системы. Такие наборы входных данных называют граничными значениями.

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

18

Ревизия: 226

Глава 1. Базовые понятия

 

 

 

подготовку тестов и выявление как можно большего количества ошибок уже в процессе кодирования. Это позволяет им в полной мере насладиться своей работой.

Ядро Linux, исходный код которого содержит миллионы строк, начиналась с простой программы, с помощью которой Линус Торвальдс (Linus Torvalds) изучал возможности параллельного выполнения задач на процессоре Intel 80386. «Одной из ранних программ Линуса была программа, которая переключалась между двумя процессами: печатанием последовательностей AAAA и BBBB. Позже эта программа превратилась в Linux» (Larry Greenfield, The Linux Users' Guide Beta Version 1).

Итак, программирование – это процесс постепенной доработки и отладки до тех пор, пока программа не будет делать то, что мы хотим. Начинать стоит с простой программы, которая делает что-то простое, а затем можно приступать к наращиванию ее функциональности, делая небольшие модификации и отлаживая добавленные куски кода. Таким образом, на каждом шаге у вас будет работающая программа, что, в какой-то мере, позволит вам судить том, какую часть работы вы уже сделали.

В последующих главах у вас будет возможность попрактиковаться в отладке программ. Кое-какие полезные советы по отладке вынесены в Приложение A – обязательно почитайте его когда у вас будет свободное время, желательно, ближе к концу изучения шестой главы.

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]