/
disciplina
/
stepik-python-debugging
Обзор
Документация
Войти
/
disciplina
/
stepik-python-debugging
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
lessons/module1/1.4/lesson4.step
18 строк
9 KB
Sergey
Вторая версия курса
27 янв 2026, 21:14
27 янв 2026, 21:14
79b9655
Код
Авторство
О чём код?
{ "block": { "name": "text", "text": "<h2>ipdb — IPython Debugger</h2>\n\n<h3>Описание</h3>\n<p><strong>ipdb</strong> (IPython Debugger) — это расширенная версия стандартного pdb, которая использует IPython в качестве интерактивной оболочки, предоставляя значительно улучшенный пользовательский опыт.</p>\n\n<h3>Установка</h3>\n<pre><code>pip install ipdb</code></pre>\n\n<h3>Основные возможности</h3>\n\n<ul>\n<li>✅ <strong>Подсветка синтаксиса</strong> — цветной вывод кода</li>\n<li>✅ <strong>Улучшенное автодополнение</strong> — Tab-автодополнение для команд, переменных и атрибутов</li>\n<li>✅ <strong>История команд</strong> — навигация стрелками вверх/вниз</li>\n<li>✅ <strong>Магические команды IPython</strong> — доступ к %timeit, %run и другим</li>\n<li>✅ <strong>Интроспекция</strong> — встроенная документация через ? и ??</li>\n<li>✅ <strong>Совместимость</strong> — полная совместимость с командами pdb</li>\n</ul>\n\n<h3>Способы запуска</h3>\n\n<h4>1. Прямой вызов в коде</h4>\n<pre><code>import ipdb\nipdb.set_trace()\n</code></pre>\n\n<h4>2. Через переменную окружения (Python 3.7+)</h4>\n<pre><code># В терминале:\nexport PYTHONBREAKPOINT=ipdb.set_trace\n\n# В коде:\nbreakpoint() # Автоматически использует ipdb\n</code></pre>\n\n<h4>3. Post-mortem отладка</h4>\n<pre><code>import ipdb\n\ntry:\n problematic_code()\nexcept Exception:\n ipdb.post_mortem()\n</code></pre>\n\n<h4>4. Запуск скрипта</h4>\n<pre><code>python -m ipdb script.py</code></pre>\n\n<h3>Базовые команды</h3>\n\n<p>ipdb поддерживает все команды pdb плюс дополнительные возможности IPython:</p>\n\n<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<tr>\n<th>Команда</th>\n<th>Описание</th>\n</tr>\n<tr>\n<td><code>n</code> / <code>next</code></td>\n<td>Выполнить следующую строку</td>\n</tr>\n<tr>\n<td><code>s</code> / <code>step</code></td>\n<td>Войти в функцию</td>\n</tr>\n<tr>\n<td><code>c</code> / <code>continue</code></td>\n<td>Продолжить выполнение</td>\n</tr>\n<tr>\n<td><code>l</code> / <code>list</code></td>\n<td>Показать код</td>\n</tr>\n<tr>\n<td><code>p</code> / <code>print</code></td>\n<td>Вывести значение</td>\n</tr>\n<tr>\n<td><code>pp</code></td>\n<td>Pretty-print</td>\n</tr>\n<tr>\n<td><code>?variable</code></td>\n<td>Документация (IPython)</td>\n</tr>\n<tr>\n<td><code>??variable</code></td>\n<td>Исходный код (IPython)</td>\n</tr>\n<tr>\n<td><code>%timeit expr</code></td>\n<td>Замер времени выполнения (IPython)</td>\n</tr>\n</table>\n\n<h3>Пример использования</h3>\n\n<pre><code>def calculate_statistics(numbers):\n \"\"\"Вычисляет статистику для списка чисел\"\"\"\n import ipdb; ipdb.set_trace() # Точка останова\n \n total = sum(numbers)\n count = len(numbers)\n average = total / count\n \n return {\n 'total': total,\n 'count': count,\n 'average': average\n }\n\ndata = [10, 20, 30, 40, 50]\nresult = calculate_statistics(data)\nprint(result)\n</code></pre>\n\n<h4>Сессия отладки:</h4>\n<pre><code>> calculate_statistics()\n-> total = sum(numbers)\n\n(Pdb) numbers\n[10, 20, 30, 40, 50]\n\n(Pdb) n # Выполнить строку\n> calculate_statistics()\n-> count = len(numbers)\n\n(Pdb) total\n150\n\n(Pdb) %timeit sum(numbers) # Магическая команда IPython\n1000000 loops, best of 3: 283 ns per loop\n\n(Pdb) c # Продолжить\n{'total': 150, 'count': 5, 'average': 30.0}\n</code></pre>\n\n<h3>Преимущества</h3>\n\n<ul>\n<li>✅ <strong>Цветной вывод</strong> — легче читать код и вывод</li>\n<li>✅ <strong>Лучшее автодополнение</strong> — работает для атрибутов объектов</li>\n<li>✅ <strong>IPython магия</strong> — доступ к мощным командам IPython</li>\n<li>✅ <strong>Интроспекция</strong> — быстрый доступ к документации</li>\n<li>✅ <strong>История</strong> — сохраняется между сессиями</li>\n<li>✅ <strong>Полная совместимость с pdb</strong> — можно использовать как замену</li>\n</ul>\n\n<h3>Недостатки</h3>\n\n<ul>\n<li>❌ <strong>Дополнительная зависимость</strong> — требует установки ipdb и IPython</li>\n<li>❌ <strong>Больший размер</strong> — IPython добавляет зависимости</li>\n<li>❌ <strong>Немного медленнее</strong> — из-за дополнительных возможностей</li>\n</ul>\n\n<h3>Расширенные возможности</h3>\n\n<h4>1. Контекстный менеджер</h4>\n<pre><code>from ipdb import launch_ipdb_on_exception\n\nwith launch_ipdb_on_exception():\n # Код, который может вызвать исключение\n risky_operation()\n # При исключении автоматически запустится ipdb\n</code></pre>\n\n<h4>2. Автоматический запуск при исключениях</h4>\n<pre><code>import sys\nimport ipdb\n\ndef custom_excepthook(type, value, tb):\n ipdb.post_mortem(tb)\n\nsys.excepthook = custom_excepthook\n\n# Теперь при любом необработанном исключении запустится ipdb\n</code></pre>\n\n<h4>3. Интеграция с pytest</h4>\n<pre><code># Автоматически запускать ipdb при падении теста\npytest --pdb --pdbcls=IPython.terminal.debugger:TerminalPdb\n\n# Или установить плагин\npip install pytest-ipdb\npytest --ipdb\n</code></pre>\n\n<h3>Конфигурация</h3>\n\n<p>Создайте файл <code>~/.ipdb</code> для настройки:</p>\n\n<pre><code># Алиасы\nalias ll longlist\nalias ps p str(%1)\n\n# Автоматические команды при старте\nimport numpy as np\nimport pandas as pd\n</code></pre>\n\n<h3>Когда использовать ipdb</h3>\n\n<h4>✅ Используйте ipdb, если:</h4>\n<ul>\n<li>Вы уже работаете с IPython или Jupyter</li>\n<li>Нужна подсветка синтаксиса в терминале</li>\n<li>Важно хорошее автодополнение</li>\n<li>Хотите использовать магические команды IPython</li>\n<li>Работаете с Data Science проектами</li>\n</ul>\n\n<h4>❌ Не используйте ipdb, если:</h4>\n<ul>\n<li>Нельзя устанавливать дополнительные пакеты</li>\n<li>Критична минимальная зависимость</li>\n<li>Работаете на очень ограниченной системе</li>\n</ul>\n\n<h3>Альтернативы</h3>\n\n<ul>\n<li><strong>pdb</strong> — если не нужны дополнительные возможности</li>\n<li><strong>pdb++</strong> — если нужны улучшения, но без IPython</li>\n<li><strong>pudb</strong> — если нужен визуальный интерфейс в терминале</li>\n</ul>\n\n<h3>Полезные ресурсы</h3>\n\n<ul>\n<li>📚 Документация: <a href=\"https://github.com/gotcha/ipdb\">https://github.com/gotcha/ipdb</a></li>\n<li>📚 IPython документация: <a href=\"https://ipython.readthedocs.io\">https://ipython.readthedocs.io</a></li>\n</ul>\n\n<p><strong>Вывод:</strong> ipdb — это отличный выбор для тех, кто хочет улучшенный опыт отладки в терминале с минимальными изменениями в workflow. Особенно полезен для пользователей IPython/Jupyter и Data Science разработчиков.</p>", "video": null, "options": {}, "subtitle_files": [], "is_deprecated": false, "source": {}, "subtitles": {}, "tests_archive": null, "feedback_correct": "", "feedback_wrong": "" }, "id": null, "has_review": false, "time": "2026-01-27T00:00:00.000Z" }