Красивые трейсбеки в Python

    Как часто вам присылают подобные отчеты об ошибке?

    Traceback (most recent call last):
    ...
      File "...", line ..., in ...
        process(lst[index])
    IndexError: list index out of range
    


    Ох, если бы только узнать значение lst и index на тот момент...

    python-catcher — автоматическая генерация HTML-трейсбеков с локальными переменными и исходниками, + загрузка в интернет — пользуйтесь на здоровье.





    Пример самого настоящего отчета: ajenti.org/catcher/view/10

    Пример использования:

    import catcher
    
    try:
        launch_important_stuff()
    except Exception, e:
        report = catcher.collect(e)
        html = catcher.formatters.HTMLFormatter().format(report, maxdepth=4)
        url = catcher.uploaders.AjentiOrgUploader().upload(html)
    
        print 'Application has crashed. Please submit this link along with the bug report:'
        print url
    


    PyPI, Github, свежие deb здесь.

    Больше и добавить нечего :)
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 21

      +7
      Но ведь это же превосходно.
        +1
        И правда же, превосходно.
      +1
      А чем ограничен размер кусков кода? Выводится вся функция, в которой произошла ошибка?
        0
        Вся функция.
          +6
          Как вариант, можно ограничивать окно 5-ю строчками, и при клике на область кода разворачивать всю функцию. Я понимаю, что функции должны быть лаконичными, но не всегда так получается…

          А вообще красиво и юзабельно
        +16
        Респект вам за то что открываете свои наработки.

        Для сбора клевых трейсбеков есть еще такая штука как Sentry :)
          0
          Сами пользуемся, собираем ошибки с 2 систем одновременно (Одна на Python, другая на Ruby On Rails). Отличная штука надо заметить.
          +1
          Красиво и полезно. Убеждаюсь, что не только Ajenti сама по себе «State of the art», но и весь софт, который вы открываете как отдельные продукты. Спасибо вам.
            +4
            А правда, почему не Sentry?

            Sentry тоже в тырнет все загружает (хоть на свой сервер, хоть в getsentry.com), и в код все эти catcher.collect(e) писать не нужно, т.к. клиент работает просто как обработчик для стандартного logging. Это означает, что не только исключения писать можно, но и ворнинги. И что можно записывать какие-то события, возникающие в сторонних библиотеках (там, где код править нехорошо). А на сервере похожие исключения объединяются по группам (если их очень много — то используется семплинг), можно отмечать решенные проблемы, ну и т.д. HTML рендерится на сервере — не нужно его генерить на клиенте и гонять по сети. В python-catcher отчеты по http загружаются — это не очень хорошо, т.к. это тоже может упасть с исключением или повесить процесс; в sentry для этого есть вариант с UDP.

            Из преимуществ python-catcher — возможно, отсутствие умного сервера, это да.
              0
              Кстати, аналогичный подход используется в django-debug-toolbar. Очень удобно.

              Там кстати показывается только соответствующий вызов в иерархии. А при клике по нему разворачивается кусок функции.

              Еще (я так и не смог уловить логику), но некоторые значимые вызовы виделяются относительно остальных.

              Мне кажется, так значительно удобнее, т. к. не всегда нужны листинги всех функций в иерархии вызовов. Сделайте их разворачиваемыми тоже.

              Пример трейса (кликабельно):

                +3
                Debug toolbar там не причем — это встроенный джанговский трейсбэк. А логика проста — не подсвечены встроенные джанговские функции.
                  0
                  Да, действительно, вы правы.
                  Так привык к этому тулбару, что мой сонный мозг даже не заметил подвоха, когда сочинял комментарий.

                  > А логика проста — не подсвечены встроенные джанговские функции.
                  Вы не поверите, но до меня это дошло как раз во время созерцания собственного скриншота. Раньше над этим как-то и не задумывался.
                    0
                    Утро вечера мудренее.
                +2
                Пичалька, что под python-3.2 не заводится и дело не только в импортах (((
                  +4
                  Отправил автору Pull Request на поддержку python 3.2
                    +2
                    Принял от Zerstoren Pull Request на поддержку python 3.2
                  +14
                  Мне больше нравятся трейсбеки веркцойка. Там еще и рабочая консоль для любого фрейма открывается.
                    0
                    Вот это, кстати, фантастика, как круто и удобно. Можно зайти в консоль в любом окружении из трейсбека и потыкаться, посмотреть, что происходило в момент ошибки.

                    Есть еще для джанги такая потрясная команда runserver_plus из django-extensions, она запускает джанговский сервер с консолью веркзеуга (на случай ошибок).
                      0
                      Для Ruby On Rails кстати есть отличный инструмент Better Errors.
                      +4
                      А чем Sentry плох?
                      я буду обновлять комментарии перед тем как нажимать кнопку «отправить»

                      Only users with full accounts can post comments. Log in, please.