Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 17753 / 610 | Оценка: 4.18 / 3.71 | Длительность: 16:16: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
Денис Хохлов
Денис Хохлов

Будет ли адаптация лекций под Python 3?

Арсений Бердюгин
Арсений Бердюгин

скачал с оффсайта последнюю версию python под windows. запускаю примеры из лекции и оно ругается на синтаксис.

Синтаксис примеров в лекции не актуален?
 

Vlad V
Vlad V
Украина
Андрей Дубоделов
Андрей Дубоделов
Россия, Москва, Фрунзенский политехнический институт ФПИ, 1984