All posts

Python Error Tracking: The Complete Guide

A complete guide to setting up error tracking in Python applications, covering Django, Flask, FastAPI, Celery, and CLI scripts.

Why Python Needs Error Tracking

Python's dynamic nature means errors that would be caught at compile time in statically typed languages only surface at runtime. A TypeError, AttributeError, or KeyError can lurk in a code path that is only hit under specific conditions. Error tracking catches these issues when they happen in production.

Basic Python Setup

The simplest error tracking setup works for any Python application:

import bugsly

bugsly.init(
    dsn="YOUR_DSN",
    environment="production",
    release="1.0.0",
)

Once initialized, unhandled exceptions are automatically captured. You can also capture exceptions manually:

try:
    risky_operation()
except Exception as e:
    bugsly.capture_exception(e)
    # Optionally re-raise or handle gracefully

Django Integration

Django is the most common Python web framework. Proper integration captures middleware errors, template errors, and view exceptions.

# settings.py
import bugsly

bugsly.init(
    dsn="YOUR_DSN",
    environment="production",
    integrations=[
        bugsly.integrations.django.DjangoIntegration(),
    ],
)

MIDDLEWARE = [
    'bugsly.integrations.django.BugslyMiddleware',
    'django.middleware.security.SecurityMiddleware',
    # ... rest of middleware
]

The Django integration automatically captures:

  • View exceptions with request context (URL, method, headers)
  • Template rendering errors with template name and line
  • Database query errors
  • User information from request.user

Flask Integration

from flask import Flask
import bugsly

bugsly.init(dsn="YOUR_DSN")

app = Flask(__name__)

@app.errorhandler(500)
def handle_500(error):
    bugsly.capture_exception(error)
    return "Internal Server Error", 500

FastAPI Integration

FastAPI runs on ASGI and is fully async. Make sure your error tracking SDK supports async properly:

from fastapi import FastAPI
import bugsly
from bugsly.integrations.fastapi import BugslyMiddleware

bugsly.init(dsn="YOUR_DSN")

app = FastAPI()
app.add_middleware(BugslyMiddleware)

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    user = await db.get_user(user_id)
    if not user:
        raise HTTPException(status_code=404)
    return user

Celery Integration

Celery tasks run in separate worker processes. Errors in tasks are particularly important to track because they often involve critical background operations like sending emails or processing payments.

from celery import Celery
from celery.signals import celeryd_init
import bugsly

@celeryd_init.connect
def init_error_tracking(**kwargs):
    bugsly.init(
        dsn="YOUR_DSN",
        environment="production",
    )

app = Celery('tasks')

@app.task(bind=True, max_retries=3)
def process_payment(self, order_id):
    try:
        order = Order.objects.get(id=order_id)
        charge_customer(order)
    except PaymentGatewayError as e:
        bugsly.capture_exception(e)
        self.retry(exc=e, countdown=60)

Adding Context

The most valuable error reports include context about the application state:

# Set user context
bugsly.set_user({"id": user.id, "email": user.email})

# Add custom context
bugsly.set_context("order", {
    "order_id": order.id,
    "total": str(order.total),
    "items_count": order.items.count(),
})

# Add breadcrumbs
bugsly.add_breadcrumb(
    category="payment",
    message=f"Processing payment for order {order.id}",
    level="info",
)

Filtering Noise

Not all exceptions are bugs. Filter out expected exceptions:

bugsly.init(
    dsn="YOUR_DSN",
    ignore_errors=[
        KeyboardInterrupt,
        SystemExit,
        django.http.Http404,
    ],
)

Performance Tips

  • Use sampling in high-traffic apps: sample_rate=0.5 captures 50% of errors
  • Send errors asynchronously so they do not block request handling
  • Set max breadcrumbs to limit memory usage: max_breadcrumbs=50

With these integrations in place, you have comprehensive Python error tracking across your entire application stack.

Try Bugsly Free

AI-powered error tracking that explains your bugs. Set up in 2 minutes, free forever for small projects.

Get Started Free