{"id":190,"library":"sentry-sdk","title":"Sentry Python SDK","description":"Official Sentry error monitoring and performance Python SDK. Current version: 2.56.0 (Mar 2026). v2.0 (Jan 2024) removed the Hub class entirely — all Hub-based patterns are broken. Scope API replaced Hub. Integrations (Django, FastAPI, Celery, etc.) must be explicitly imported and passed. traces_sample_rate must be set to enable performance monitoring — omitting it means zero traces sent. enable_tracing deprecated in favor of traces_sample_rate.","status":"active","version":"2.56.0","language":"python","source_language":"en","source_url":"https://github.com/getsentry/sentry-python","tags":["sentry","monitoring","observability","python","error-tracking","apm"],"install":[{"cmd":"pip install sentry-sdk","lang":"bash","label":"Python (base)"},{"cmd":"pip install 'sentry-sdk[fastapi]'","lang":"bash","label":"With FastAPI integration"},{"cmd":"pip install 'sentry-sdk[django]'","lang":"bash","label":"With Django integration"}],"dependencies":[{"reason":"Required. Installed automatically.","package":"urllib3","optional":false}],"imports":[{"note":"Hub class removed in v2.0. Use sentry_sdk.new_scope() or sentry_sdk.push_scope(). enable_tracing deprecated — use traces_sample_rate=1.0.","wrong":"# v1 Hub pattern — Hub removed in v2\nfrom sentry_sdk import Hub\nwith Hub.current.configure_scope() as scope:\n    scope.set_tag('key', 'val')  # AttributeError: Hub removed\n\n# enable_tracing deprecated\nsentry_sdk.init(dsn='...', enable_tracing=True)\n\n# Missing traces_sample_rate — no performance data sent\nsentry_sdk.init(dsn='...')  # errors only, no traces","symbol":"sentry_sdk.init","correct":"import sentry_sdk\n\nsentry_sdk.init(\n    dsn='https://KEY@oNNN.ingest.sentry.io/PROJECT_ID',\n    traces_sample_rate=1.0,   # 0.0-1.0 — required for performance\n    environment='production',\n    release='myapp@1.0.0',\n    send_default_pii=False,   # do not send PII by default\n)\n\n# Capture exceptions\ntry:\n    1 / 0\nexcept ZeroDivisionError:\n    sentry_sdk.capture_exception()\n\n# Capture message\nsentry_sdk.capture_message('Something happened', level='warning')\n\n# Add context\nwith sentry_sdk.new_scope() as scope:\n    scope.set_tag('component', 'checkout')\n    scope.set_user({'id': '123', 'email': 'user@example.com'})\n    sentry_sdk.capture_exception()"},{"note":"Integrations must be imported and instantiated. Many are auto-detected but explicitly passing them ensures correct configuration.","wrong":"# Wrong: integrations auto-detected in v1 but must be explicit in some cases\n# Wrong: passing string names instead of instances\nsentry_sdk.init(\n    dsn='...',\n    integrations=['fastapi', 'celery']  # TypeError\n)","symbol":"Framework integrations","correct":"import sentry_sdk\nfrom sentry_sdk.integrations.fastapi import FastApiIntegration\nfrom sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration\nfrom sentry_sdk.integrations.celery import CeleryIntegration\n\nsentry_sdk.init(\n    dsn='https://KEY@oNNN.ingest.sentry.io/PROJECT_ID',\n    traces_sample_rate=0.1,  # 10% of transactions\n    integrations=[\n        FastApiIntegration(),\n        SqlalchemyIntegration(),\n        CeleryIntegration(),\n    ]\n)"}],"quickstart":{"code":"# pip install sentry-sdk\nimport sentry_sdk\n\nsentry_sdk.init(\n    dsn='https://KEY@oNNN.ingest.sentry.io/PROJECT_ID',\n    traces_sample_rate=1.0,\n    environment='production',\n    release='1.0.0',\n    before_send=lambda event, hint: event  # return None to drop event\n)\n\n# Automatic exception capture — unhandled exceptions sent automatically\n\n# Manual exception capture\ntry:\n    result = 1 / 0\nexcept Exception as e:\n    sentry_sdk.capture_exception(e)\n\n# Add user context\nsentry_sdk.set_user({'id': '42', 'email': 'user@example.com'})\n\n# Add tags\nsentry_sdk.set_tag('payment_provider', 'razorpay')\n\n# Add extra data\nsentry_sdk.set_extra('order_id', 'ord_123')\n\n# Breadcrumbs\nsentry_sdk.add_breadcrumb(\n    category='auth',\n    message='User logged in',\n    level='info'\n)\n\n# Performance tracing\nwith sentry_sdk.start_transaction(op='task', name='process_order'):\n    with sentry_sdk.start_span(op='db', description='fetch order'):\n        pass  # your DB call here","lang":"python","description":"Sentry Python SDK — error capture, context, and performance tracing."},"warnings":[{"fix":"Replace Hub.current.configure_scope() with sentry_sdk.new_scope(). Replace Hub.current.capture_exception() with sentry_sdk.capture_exception().","message":"Hub class removed in v2.0.0 (Jan 2024). All Hub-based patterns (Hub.current, configure_scope, push_scope via Hub) raise AttributeError. Massive volume of pre-2024 tutorials use Hub.","severity":"breaking","affected_versions":">= 2.0"},{"fix":"Replace enable_tracing=True with traces_sample_rate=1.0","message":"enable_tracing parameter deprecated. Still works but logs DeprecationWarning. Will be removed in next major version.","severity":"breaking","affected_versions":">= 2.0"},{"fix":"Add traces_sample_rate=0.1 (10%) for production or traces_sample_rate=1.0 for development.","message":"Omitting traces_sample_rate means NO performance data (transactions/spans) is sent to Sentry — only errors. Default is 0.0. Many devs wonder why traces are missing.","severity":"gotcha","affected_versions":"all"},{"fix":"before_send must return the event dict to send it. Return None only when intentionally filtering.","message":"before_send returning None silently drops the event. Sentry logs 'before send dropped event' at INFO level — easy to miss if not watching logs.","severity":"gotcha","affected_versions":"all"},{"fix":"span.set_data('key', value) instead of span.set_measurement('key', value)","message":"set_measurement() deprecated in favor of set_data() on spans. Will be removed in next major version.","severity":"gotcha","affected_versions":">= 2.0"},{"fix":"Call sentry_sdk.init() at the very top of your entry point, before importing framework app objects.","message":"sentry_sdk.init() must be called before any framework initialization (before app = FastAPI(), before Django setup). Calling it after means some auto-instrumentation is missed.","severity":"gotcha","affected_versions":"all"},{"fix":"Initialize at module level before app creation, not inside async startup handlers.","message":"In async apps (FastAPI, async Django), sentry_sdk.init() should be called inside an async context or at module level before the event loop starts to ensure async instrumentation works correctly.","severity":"gotcha","affected_versions":">= 2.0"},{"fix":"Ensure the DSN string passed to `sentry_sdk.init()` is a complete and valid Sentry DSN, replacing any placeholders with their actual values obtained from your Sentry project settings.","message":"sentry_sdk.init() fails if the DSN provided is malformed or contains placeholders (e.g., 'PROJECT_ID', 'PUBLIC_KEY', 'HOST') instead of actual values, leading to a sentry_sdk.utils.BadDsn error.","severity":"breaking","affected_versions":"all"},{"fix":"Replace all DSN placeholders (PROJECT_ID, KEY, oNNN) with the actual values obtained from your Sentry project settings. Ensure the DSN is a valid URL.","message":"sentry_sdk.init() failed because the DSN contains placeholder values (e.g., 'PROJECT_ID', 'KEY', 'oNNN') instead of actual Sentry DSN components.","severity":"breaking","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T09:54:45.466Z","next_check":"2026-06-25T00:00:00.000Z","problems":[{"fix":"Remove all references to `sentry_sdk.Hub`. For managing scope, use `sentry_sdk.set_context()`, `sentry_sdk.set_user()`, `sentry_sdk.add_breadcrumb()`, or `sentry_sdk.push_scope()`.","cause":"The `sentry_sdk.Hub` class was entirely removed in `sentry-sdk` version 2.0 (released January 2024), replaced by direct SDK functions and the `Scope` API.","error":"AttributeError: module 'sentry_sdk' has no attribute 'Hub'"},{"fix":"Add the necessary import statement, for example: `from sentry_sdk.integrations.django import DjangoIntegration`.","cause":"Specific framework integrations (e.g., `DjangoIntegration`, `FastApiIntegration`) must be explicitly imported from their respective `sentry_sdk.integrations.<framework>` modules before being passed to `sentry_sdk.init()`.","error":"NameError: name 'DjangoIntegration' is not defined"},{"fix":"Replace `enable_tracing=True` with `traces_sample_rate=1.0` (or your desired sampling rate between 0.0 and 1.0) in your `sentry_sdk.init()` call.","cause":"The `enable_tracing` parameter was deprecated in `sentry-sdk` v1.x and completely removed in v2.0; performance monitoring is now controlled solely by `traces_sample_rate`.","error":"TypeError: init() got an unexpected keyword argument 'enable_tracing'"},{"fix":"Provide your Sentry DSN either directly in `sentry_sdk.init(dsn=\"YOUR_DSN_HERE\")` or by setting the `SENTRY_DSN` environment variable.","cause":"The DSN (Data Source Name) is a mandatory configuration for `sentry-sdk` to know where to send events, and it has not been provided.","error":"[sentry] DSN not set, not sending events."},{"fix":"Pass an actual exception instance (e.g., a caught exception object or `sys.exc_info()[1]`) to `capture_exception()`. For capturing arbitrary string messages, use `sentry_sdk.capture_message()` instead.","cause":"The `sentry_sdk.capture_exception()` function expects an actual exception object as its argument, not a string or other non-exception type.","error":"TypeError: exception should be an exception instance, got str"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":10.2,"disk_size":"71.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":11.9,"disk_size":"36.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":10.2,"disk_size":"22.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":10.2,"disk_size":"72M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.28,"mem_mb":11.9,"disk_size":"37M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":10.2,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.47,"mem_mb":11.2,"disk_size":"76.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.61,"mem_mb":12.7,"disk_size":"40.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.48,"mem_mb":11.2,"disk_size":"25.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.39,"mem_mb":11.2,"disk_size":"77M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.48,"mem_mb":12.7,"disk_size":"41M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":11.2,"disk_size":"26M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.63,"mem_mb":11.2,"disk_size":"67.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.7,"mem_mb":12.7,"disk_size":"32.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.61,"mem_mb":11.2,"disk_size":"17.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.58,"mem_mb":11.2,"disk_size":"68M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.67,"mem_mb":12.6,"disk_size":"32M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.59,"mem_mb":11.2,"disk_size":"18M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.63,"mem_mb":11.5,"disk_size":"67.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.73,"mem_mb":13.2,"disk_size":"31.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.62,"mem_mb":11.5,"disk_size":"16.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.57,"mem_mb":11.5,"disk_size":"68M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.65,"mem_mb":13.2,"disk_size":"31M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.58,"mem_mb":11.5,"disk_size":"17M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":9.7,"disk_size":"69.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.38,"mem_mb":11.3,"disk_size":"36.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.28,"mem_mb":9.7,"disk_size":"22.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"django","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.25,"mem_mb":9.7,"disk_size":"70M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"fastapi","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.34,"mem_mb":11.3,"disk_size":"36M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":9.7,"disk_size":"23M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}