Django 4.2集成Sentry SDK触发KeyError: 'request'问题求助
Django 4.2 + Sentry SDK 2.13.0 触发上报时出现
KeyError: 'request' 问题 问题详情
- 项目基于Django 4.2,搭配Sentry SDK 2.13.0和django-cms 3.11.6
- 每次触发Sentry上报(自动错误上报或手动调用上报info/warning日志),都会伴随生成多个
KeyError: 'request'错误 - 原始错误可正常显示在Sentry平台,说明核心上报功能未完全失效
- 问题在升级项目依赖(重点是Django升级到4.2)后出现
- 已在模板配置中添加
django.template.context_processors.request上下文处理器,但未解决问题 - 不通过Sentry上报时,仅显示原始业务错误,无
KeyError异常
相关配置
Sentry初始化配置
import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration sentry_sdk.init( dsn="XXXX", integrations=[DjangoIntegration()], server_name='XXXX', send_default_pii=True )
模板上下文处理器配置
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ ... ], 'OPTIONS': { 'context_processors': [ 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', ... 'django.template.context_processors.request', ... ], 'loaders': [ ... ], }, } ]
错误堆栈信息
KeyError 'request' django/template/context.py in __getitem__ at line 83 cms/templatetags/cms_tags.py in _get_empty_context at line 636 ... django/core/handlers/exception.py in inner at line 55
解决思路与建议
- 临时规避:修改Sentry的DjangoIntegration配置,尝试禁用模板上下文追踪(如
DjangoIntegration(tracing=False)),或调整send_default_pii参数,测试是否能阻止该异常触发,同时确保核心上报功能正常。 - 检查依赖兼容性:确认django-cms 3.11.6与Django 4.2的适配情况,尝试升级django-cms到同分支的最新补丁版本,看是否修复了相关上下文处理的兼容问题。
- 调试上下文生成逻辑:在
cms/templatetags/cms_tags.py的_get_empty_context方法中添加日志输出,查看Sentry上报流程中调用该方法时的上下文状态,判断是否未正确传入request对象。可给该方法添加request的容错处理,避免直接通过__getitem__引发KeyError。 - 调整Sentry SDK版本:尝试降级Sentry SDK到2.13.0之前的稳定版本,或升级到最新版,验证是否解决了依赖间的兼容冲突。
- 过滤异常上报:在项目全局异常处理逻辑中,针对
KeyError: 'request'进行过滤,若该异常来自Sentry上报流程,则跳过二次上报。
内容的提问来源于stack exchange,提问作者Nicolas Lusa
相关产品推荐
相关产品推荐

