sentry_sdk.init()必须在任何可能抛出异常的代码执行前调用,否则zerodivisionerror、keyerror等未捕获异常无法上报;因其依赖sys.excepthook和wsgi/asgi中间件钩子注册,晚于这些机制则监控失效。

为什么 sentry_sdk.init() 必须在应用启动时调用
不是“越早越好”,而是必须在任何可能抛出异常的代码执行前完成初始化。否则 ZeroDivisionError、KeyError 这类未捕获异常根本不会上报——Sentry 的 SDK 依赖于在 Python 的 sys.excepthook 和 WSGI/ASGI 中间件注册钩子,晚于这些钩子注册就等于没装监控。
- Flask/FastAPI:放在
app = Flask(__name__)或app = FastAPI()之后、路由注册之前 - Django:在
settings.py末尾或apps.py的ready()方法里调用,不能写在视图函数里 - 异步任务(Celery):需单独在 worker 启动时调用
sentry_sdk.init(),且要传integrations=[CeleryIntegration()]
Web 框架中间件配置不生效的常见原因
很多用户以为加了 sentry_sdk.init() 就自动捕获所有 HTTP 错误,结果 500 页面没上报。问题往往出在中间件加载顺序或框架兼容性上。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- FastAPI:必须显式启用
asgi集成,sentry_sdk.init(integrations=[FastApiIntegration()]),否则 ASGI 生命周期事件(如http.request)无法关联到异常 - Flask:默认集成生效,但如果用了
werkzeug.middleware.proxy_fix.ProxyFix等中间件,要确保 Sentry 的FlaskIntegration()在它们之后注册 - Django:检查
MIDDLEWARE列表是否包含'sentry_sdk.integrations.django.DjangoIntegration',且位置不能太靠后(应在CommonMiddleware之后、ErrorMiddleware之前)
before_send 过滤器里最容易忽略的返回值规则
这个回调函数不是“能过滤就行”,它必须明确返回 event(上报)、None(丢弃)或修改后的 event。返回其他值(比如 False 或空字典)会导致 Sentry 服务端静默拒绝该事件,日志里只显示 Event dropped due to before_send returning falsy value。
- 过滤健康检查请求:
if event.get('request', {}).get('url', '').endswith('/health'): return None - 降噪高频错误:
if event.get('exception') and 'ConnectionResetError' in str(event): return None - 添加上下文但不修改结构:
event['extra']['env'] = os.getenv('ENVIRONMENT'),最后别忘了return event
本地开发环境误报 404 和调试异常
本地跑 flask run 或 uvicorn main:app 时,大量 404 Not Found、KeyboardInterrupt 被上报,不是配置错,而是默认行为。Sentry 把所有未处理异常都当错误,包括开发中常见的手动中断和测试路径。
- 禁用开发环境上报:
sentry_sdk.init(dsn=..., environment='production' if os.getenv('ENV') == 'prod' else None),设为None会彻底关闭上报 - 排除特定异常类型:
ignore_errors=[KeyboardInterrupt, AssertionError] - 避免调试器干扰:PyCharm 的 “raise exception on breakpoint” 会触发额外异常,建议调试时临时关掉 Sentry
traces_sample_rate=0.1 这类配置在高并发服务里很容易漏掉关键错误;真正要盯住的,是 send_default_pii=False 是否被意外开启——一旦开,用户邮箱、token 可能直接进 Sentry 日志。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










