Skip to main content

Beautiful, readable Python tracebacks with colors and formatting

Project description

Beautiful, Readable Python Stack Traces

MIT License Python Versions

Human readable stacktraces for Python.

Comparison of standard Python traceback vs Beautiful Traceback

[!NOTE] This is a fork of the pretty-traceback repo with simplified development and improvements for better integration with FastAPI, structlog, IPython, pytest, and more. This project is used in python-starter-template to provide better debugging experience in production environments.

Quick Start

The fastest way to see it in action:

# Clone and run an example
git clone https://github.com/iloveitaly/beautiful-traceback
cd beautiful-traceback
uv run examples/simple.py

Overview

Beautiful Traceback groups together what belongs together, adds coloring and alignment. All of this makes it easier for you to see patterns and filter out the signal from the noise. This tabular format is best viewed in a wide terminal.

Installation

From PyPI (when published)

# Using uv (recommended)
uv add beautiful-traceback

# Using pip
pip install beautiful-traceback

Development Installation

To install from source:

git clone https://github.com/iloveitaly/beautiful-traceback
cd beautiful-traceback
uv sync

Run examples:

uv run examples/simple.py

Run tests:

uv run pytest

Usage

Add the following to your __main__.py or the equivalent module which is your entry point.

try:
    import beautiful_traceback
    beautiful_traceback.install()
except ImportError:
    pass    # no need to fail because of missing dev dependency

Please do not add this code e.g. to your __init__.py or any other module that your users may import. They may not want you to mess with how their tracebacks are printed.

If you do feel the overwhelming desire to import the beautiful_traceback in code that others might import, consider using the envvar argument, which will cause the install function to effectively be a noop unless you set ENABLE_BEAUTIFUL_TRACEBACK=1.

try:
    import beautiful_traceback
    beautiful_traceback.install(envvar='ENABLE_BEAUTIFUL_TRACEBACK')
except ImportError:
    pass    # no need to fail because of missing dev dependency

Note, that the hook is only installed if the existing hook is the default. Any existing hooks that were installed before the call of beautiful_traceback.install will be left in place.

LoggingFormatter

A logging.Formatter subclass is also available (e.g. for integration with Flask, FastAPI, etc).

import os
from flask.logging import default_handler

try:
    if os.getenv('FLASK_DEBUG') == "1":
        import beautiful_traceback
        default_handler.setFormatter(beautiful_traceback.LoggingFormatter())
except ImportError:
    pass    # no need to fail because of missing dev dependency

IPython and Jupyter Integration

Beautiful Traceback works seamlessly in IPython and Jupyter notebooks:

# Load the extension
%load_ext beautiful_traceback

# Unload if needed
%unload_ext beautiful_traceback

The extension automatically installs beautiful tracebacks for your interactive session.

Pytest Integration

Beautiful Traceback includes a pytest plugin that automatically enhances test failure output.

Automatic Activation

The plugin activates automatically when beautiful-traceback is installed. No configuration needed!

Configuration Options

Customize the plugin in your pytest.ini or pyproject.toml:

[tool.pytest.ini_options]
enable_beautiful_traceback = true                    # Enable/disable the plugin
enable_beautiful_traceback_local_stack_only = true   # Show only local code (filter libraries)

Or in pytest.ini:

[pytest]
enable_beautiful_traceback = true
enable_beautiful_traceback_local_stack_only = true

Examples

Check out the examples/ directory for detailed usage examples including basic usage, exception chaining, logging integration, and more.

# Quick single-exception example
uv run examples/simple.py

# Interactive demo with multiple exception types
uv run examples/demo.py

Configuration

Installation Options

Beautiful Traceback supports several configuration options:

beautiful_traceback.install(
    color=True,                            # Enable colored output
    only_tty=True,                         # Only activate for TTY output
    only_hook_if_default_excepthook=True,  # Only install if default hook
    local_stack_only=False,                # Filter to show only local code
    envvar='ENABLE_BEAUTIFUL_TRACEBACK'    # Optional environment variable gate
)

Environment Variables

  • NO_COLOR - Disables colored output when set (respects no-color.org standard)
  • ENABLE_BEAUTIFUL_TRACEBACK - Controls activation when using the envvar parameter (set to 1 to enable)

LoggingFormatterMixin

For more advanced logging integration, you can use LoggingFormatterMixin as a base class:

import logging
import beautiful_traceback

class MyFormatter(beautiful_traceback.LoggingFormatterMixin, logging.Formatter):
    def __init__(self):
        super().__init__(fmt='%(levelname)s: %(message)s')

This gives you full control over the log format while adding beautiful traceback support.

Global Installation via PTH File

You can enable beautiful-traceback across all Python projects without modifying any source code by using a .pth file. Python automatically executes import statements in .pth files during interpreter startup, making this perfect for development environments.

Using the CLI Command

The easiest way to inject beautiful-traceback into your current virtual environment:

beautiful-traceback

This command:

  • Only works within virtual environments (for safety)
  • Installs the .pth file into your current environment's site-packages
  • Displays the installation path every time it runs

Output:

Beautiful traceback injection installed: /path/to/.venv/lib/python3.11/site-packages/beautiful_traceback_injection.pth

Using a Shell Function (Alternative)

Alternatively, add this function to your .zshrc or .bashrc:

# Create a file to automatically import beautiful-traceback on startup
python-inject-beautiful-traceback() {
  local site_packages=$(python -c "import site; print(site.getsitepackages()[0])")

  local pth_file=$site_packages/beautiful_traceback_injection.pth
  local py_file=$site_packages/_beautiful_traceback_injection.py

  cat <<'EOF' >"$py_file"
def run_startup_script():
  try:
    import beautiful_traceback
    beautiful_traceback.install(only_tty=False)
  except ImportError:
    pass

run_startup_script()
EOF

  echo "import _beautiful_traceback_injection" >"$pth_file"
  echo "Beautiful traceback injection created: $pth_file"
}

After sourcing your shell config, run python-inject-beautiful-traceback to enable beautiful tracebacks globally for that Python environment.

Alternatives

Beautiful Traceback is heavily inspired by the backtrace module by nir0s but there are many others (sorted by github stars):

License

MIT License

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

beautiful_traceback-0.3.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beautiful_traceback-0.3.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: beautiful_traceback-0.3.0.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for beautiful_traceback-0.3.0.tar.gz
Algorithm Hash digest
SHA256 caff49fba45e45bef170140b8405c3fb74ca1e947cabd5adab0243be02984b2c
MD5 55d0d01a1887d761e549792dbafd0111
BLAKE2b-256 9422c112edab8e82b30f49082d9f52a083e05fb8cd0b333510ff2dd5232570ef

See more details on using hashes here.

File details

Details for the file beautiful_traceback-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: beautiful_traceback-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for beautiful_traceback-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 618a8c1cfa2a87804e7b38138faf696c2e950483dccb4feba86f1ac57759ff47
MD5 7c756f0eb2da27e55fb4176a152b0a7e
BLAKE2b-256 a495a3b0968e8e6554fab83d1daa66bcd5fddb892d4d942051ac676326209777

See more details on using hashes here.

Supported by

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