1.1 Starting, Stopping, and Typing Commands into the Interactive Interpreter:

1. python или python3 в командной строке для запуска интерактивного интерпретатора.
2. Пример цикла:
for i in range(10):
print(i)
3. Интерактивный интерпретатор:
а) “>>>” – ожидание ввода.
б) “…” – ожидание продолжения текущей конструкции (например, цикла for). Чтобы завершить ввод текущей конструкции, нужно в ответ на “…” нажать Return.
в) можно объявлять переменные, при этом задаётся только имя – тип не требуется. Например, a = 88. Впоследствии a будет доступна для использования в последующих выражениях (в рамках данной сессии интерпретатора, конечно).
г) чтобы обратиться к результату последней операции, если, например, он не был сохранён в переменной, используется специальный идентификатор “_” (доступен только в интерактивном режиме). Таким образом, результат последней операции можно сохранить в переменной, даже если это не было сделано изначально, присвоив “_” переменной: a = _.
д) можно использовать клавиши “вверх” и “вниз” для навигации по истории введённых команд.
е) “Type help() for interactive help, or help(object) for help about object.”
ж) quit() или exit() или Ctrl+D для выхода из интерпретатора.
4. Для выполнения скрипта, содержащегося в файле: python(3) filename.py.

1.2 Project: Catching the Bus:

1. import urllib.request – импортирование модуля библиотеки (получение данных по урлу)
2. Пример получения информации по урлу:

response = urllib.request.urlopen(‘http://ya.ru’)

При этом print(response) даёт:
<http.client.HTTPResponse object at 0x1030537b8>

То есть в response завернут ответ сервера. Чтобы получить саму информацию из ответа:
data = response.read()

print(data) даст:
b'{“settings”: {“gotPaid”: “YES”}}’

При этом повторное получение информации (вызов read) вернёт пустой объект.

3. from xml.etree.ElementTree import XML – другой способ импортирования модуля библиотеки (парсинг XML)
4. Далее пример парсинга XML-документа и получения значений узлов с заданным именем тега:
xmlDoc = XML(data)
for nodeValue in xmlDoc.findall(“.//tagName”):
print(nodeValue.text)

 

1.3 Project: Reading Command Line Arguments and Making a Script:

1. Для доступа к аргументам, переданным в программу:
sys.argv

для этого предварительно нужно импортировать модуль sys: import sys

2. “Make program quit; this is how you make program just stop. If you want the program to terminate earlier, raise a system exit”:
raise SystemExit(0)

3. Функция len() – узнать количество символов в массиве, строке и т.п.

4. Форматирование строки:
firstValue = 3
secondValue = 5
“firstValue == {}, secondValue == {}, sum == {}”.format(firstValue, secondValue, firstValue + secondValue)

5. Чтобы при каждом выполнении скрипта не указывать название интерпретатора ( python(3) ), нужно:
а) в начало файла со скриптом добавить следующее («pound bang trick»): #!/usr/bin/env python(3)
б) изменить с помощью chmod параметры файла: chmod +x filename.py

 

1.4 Debugging:

1. При невозможности проинтерпретировать входные данные, «python will crash and it will generate a traceback message».
2. «The most essential part of a traceback message is the very last line is actually what is wrong with your program».
3. Запуск интерпретатора с опцией -i (python3 -i filename.py «first arg» «second arg») «will run the program and then drop you into python’s interactive prompt afterwards». После этого можно, например, обратиться к переменным для просмотра их значения.
4. После того, как интерпретатор свалился в интерактивном режиме, можно загрузить отладчик, выполнив следующие действия:
а) import pdb
б) pdb.pm() («post mortem») – покажет строку кода, которая привела к сваливанию интерпретатора.

После этого interactive propmt меняется с «>>>» на «(Pdb)» и можно пользоваться разными отладочными командами, которые до вызова pdb.pm() были недоступны:
• list – отобразить листинг текста программы, содержащий строку, ставшую причиной падения интерпретатора, и окружающий её контекст:
2 import sys
3 myVar = 88
4 print(“my var is “, myVar)
5 print(“command options: “, sys.argv)
6 print(“another line”)
7 -> prit(“causing fail”)
8
[EOF]
(Pdb)
При этом до вызова pdb.pm() выполнение list даст следующий вывод: <class ‘list’> – т.е. выводится информация о встроенном классе list, т.е. данная команда имеет другое значение.

5. Для выхода из «(Pdb)» в «>>>» используется quit()/exit().

6. Отладчик можно запустить и из самого кода, добавив следующий код:
import pdb; pdb.set_trace().
Это даёт эффект добавления брейкпоинта вручную. В таком случае запуск интерпретатора в интерактивном режиме уже необязателен. (Брейкпоинт добавляется именно с помощью pdb.set_trace(); import pdb – просто для импорта. Т.е. import pdb можно добавить однажды в самом верху, а потом в нужных местах добавлять брейкпоинты, добавляя pdb.set_trace()).

7. Другие доступные команды в режиме отладки:
а) s – «single step» – step over.
б) c – «continue»
При этом выполнение list покажет текущий контекст – текущую строку и её контекст:
2 import sys
3 import pdb
4 myVar = 88
5 pdb.set_trace()
6 print(“my var is “, myVar)
7 -> print(“command options: “, sys.argv)
8 pdb.set_trace()
9 print(“another line”)
10 pdb.set_trace()
11 print(“causing fail”)

Advertisements