Skip to main content

A utility that cures the horrible traceback displays in Python, making them more readable.

Project description

https://www.codeshelter.co/static/badges/badge-flat.svg https://img.shields.io/badge/code%20style-black-000000.svg

TBVaccine is a utility that pretty-prints Python tracebacks. It automatically highlights lines you care about and deemphasizes lines you don’t, and colorizes the various elements in a traceback to make it easier to parse.

Here are some screenshots. This is the before:

misc/before.png

And this is the after:

misc/after.png

If you add the hook or call TBVaccine in your code, it can also print all variables in each stack frame. That is, it turns this:

misc/before-vars.png

into this:

misc/after-vars.png

Installation

To install, use pip:

pip install tbvaccine

You are done!

Global usage

You can have TBVaccine insert itself all up in your system and stick its tentacles in all your libraries, like a cute, useful Cthulhu. That way, every single Python traceback in your system will be pretty. Just set the TBVACCINE environment variable to 1, and you’re done.

E.g. for bash:

export TBVACCINE=1

Or fish:

set -x TBVACCINE=1

Usage as a command-line utility

TBVaccine can be used from the command line several ways.:

python -m tbvaccine myscript.py

Or just pipe STDERR into it from the program you want to watch:

./myscript.py 2>&1 | tbvaccine

And all the tracebacks will now be pretty!

Usage as a Python library

There are various ways to use TBVaccine as a Python library.

Initialize it like so:

from tbvaccine import TBVaccine
tbv = TBVaccine(
    code_dir="/my/code/dir",
    isolate=True
)

code_dir marks the directory we code about. Files under that directory that appear in the traceback will be highlighted. If not passed, the current directory, as returned by os.getcwd() will be used.

If isolate is False, all lines are colorized, and code_dir is ignored.

If show_vars is False, variables will not be printed in each stack frame.

To use it in an except block:

from tbvaccine import TBVaccine
try:
    some_stuff()
except:
    print(TBVaccine().format_exc())

To make it the default way of printing tracebacks, use add_hook() (which also accepts any argument the TBVaccine class does):

import tbvaccine
tbvaccine.add_hook(isolate=False)

1 / 0

Bam! Instant pretty tracebacks.

Logging integration

You can integrate TBVaccine with logging like so:

class TbVaccineFormatter(logging.Formatter):
    def  formatException(self, exc_info):
        return TBVaccine(isolate=True).format_exc()

sh = logging.StreamHandler()
sh.setFormatter(TbVaccineFormatter('[%(levelname)s] %(asctime)s : %(message)s', '%Y-%m-%d %H:%M:%S'))
logger.addHandler(sh)

Epilogue

This library is still pretty new, please contribute patches if something doesn’t work as intended, and also please tell your friends about it! Hopefully one day it will be implemented in the Python interpreters themselves.

– Stavros

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tbvaccine-0.3.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

tbvaccine-0.3.0-py2.py3-none-any.whl (8.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file tbvaccine-0.3.0.tar.gz.

File metadata

  • Download URL: tbvaccine-0.3.0.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for tbvaccine-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e361d3422f6cf52f7908f775d66026adab3e76edfe65e76a57f3ced8979f49af
MD5 a115b5a5c9c196085381060c24b807be
BLAKE2b-256 3722f893a3d505cb6af8ca6300b27ebeb9193a5373dccc944c28ef5b27fde182

See more details on using hashes here.

File details

Details for the file tbvaccine-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for tbvaccine-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5c88ce2a3adfecf5064dbfb4cbb5f5b8e9df4adcf0ecf980739af296597f8d75
MD5 3584e13855a86f13b5ebf626b174a900
BLAKE2b-256 9dbf677a46058a52882a68965904a86a03b7c890bc296d4ae306511a39a5c61d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page