Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 21607 / 1238 | Оценка: 4.18 / 3.71 | Длительность: 16:10:00
ISBN: 978-5-9556-0109-0
Лекция 14:

Устройство интерпретатора языка Python

< Лекция 13 || Лекция 14: 12345678

Отладка

В интерпретаторе языка Python заложены возможности отладки программ, а в стандартной поставке имеется простейший отладчик - pdb. Следующий пример показывает программу, которая подвергается отладке, и типичную сессию отладки:

# File myfun.py
            def fun(s):
              lst = []
              for i in s:
                lst.append(ord(i))
              return lst

Так может выглядеть типичный процесс отладки:

>>> import pdb, myfun
            >>> pdb.runcall(myfun.fun, "ABCDE")
            > /examples/myfun.py(4)fun()
            -> lst = []
            (Pdb) n
            > /examples/myfun.py(5)fun()
            -> for i in s:
            (Pdb) n
            > /examples/myfun.py(6)fun()
            -> lst.append(ord(i))
            (Pdb) l
              1     #!/usr/bin/python
              2     # File myfun.py
              3     def fun(s):
              4       lst = []
              5       for i in s:
              6  ->     lst.append(ord(i))
              7       return lst
            [EOF]
            (Pdb) p lst
            []
            (Pdb) p vars()
            {'i': 'A', 's': 'ABCDE', 'lst': []}
            (Pdb) n
            > /examples/myfun.py(5)fun()
            -> for i in s:
            (Pdb) p vars()
            {'i': 'A', 's': 'ABCDE', 'lst': [65]}
            (Pdb) n
            > /examples/myfun.py(6)fun()
            -> lst.append(ord(i))
            (Pdb) n
            > /examples/myfun.py(5)fun()
            -> for i in s:
            (Pdb) p vars()
            {'i': 'B', 's': 'ABCDE', 'lst': [65, 66]}
            (Pdb) r
            - Return -
            > /examples/myfun.py(7)fun()->[65, 66, 67, 68, 69]
            -> return lst
            (Pdb) n
            [65, 66, 67, 68, 69]
            >>>

Интерактивный отладчик вызывается функцией pdb.runcall() и на его приглашение (Pdb) следует вводить команды. В данном примере сессии отладки были использованы некоторые из следующих команд: l (печать фрагмента трассируемого кода), n (выполнить все до следующей строки), s (сделать следующий шаг, возможно, углубившись в вызов метода или функции), p (печать значения), r (выполнить все до возврата из текущей функции).

Разумеется, некоторые интерактивные оболочки разработчика для Python предоставляют функции отладчика. Кроме того, отладку достаточно легко организовать, поставив в ключевых местах программы, операторы print для вывода интересующих параметров. Обычно этого достаточно, чтобы локализовать проблему. В CGI-сценариях можно использовать модуль cgitb, о котором говорилось в одной из предыдущих лекций.

< Лекция 13 || Лекция 14: 12345678
Вера Юшкова
Вера Юшкова

В курсе содержатся примеры из устаревшей версии питона. Будет ли переработка курса, или в процессе обучения надо самостоятельно перекладывать программные коды на версию 3.7?

Диас Данебек
Диас Данебек
Владимир Харитонов
Владимир Харитонов
Россия, Петрозаводск, Карельский государственный педагогический университет, 2002
Данил Новиков
Данил Новиков
Казахстан, Караганда