Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 17068 / 526 | Оценка: 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
Зураб Муциев
Зураб Муциев

Здравствуйте друзья, коллеги.

С кем из тьюторов вы работаете? Просто возникают вопросы, и хочется чтоб обяснили на примере как это происходит, гугл не всегда дает ответа.

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

Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Роман Сорокин
Роман Сорокин
Россия, СПб
Игорь Плисюк
Игорь Плисюк
Украина