{"record":{"id":"4b8b4708b9ec1741","repo":"pallets/flask","slug":"there-is-no-request-in-this-context","errorCode":null,"errorMessage":"There is no request in this context.","messagePattern":"There is no request in this context\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"src/flask/ctx.py","lineNumber":377,"sourceCode":"        .. versionchanged:: 1.1\n            The current session data is used instead of reloading the original data.\n\n        .. versionadded:: 0.10\n        \"\"\"\n        return self.__class__(\n            self.app,\n            request=self._request,\n            session=self._session,\n        )\n\n    @property\n    def request(self) -> Request:\n        \"\"\"The request object associated with this context. Accessed through\n        :data:`.request`. Only available in request contexts, otherwise raises\n        :exc:`RuntimeError`.\n        \"\"\"\n        if self._request is None:\n            raise RuntimeError(\"There is no request in this context.\")\n\n        return self._request\n\n    def _get_session(self) -> SessionMixin:\n        \"\"\"Open the session if it is not already open for this request context.\"\"\"\n        if self._request is None:\n            raise RuntimeError(\"There is no request in this context.\")\n\n        if self._session is None:\n            si = self.app.session_interface\n            self._session = si.open_session(self.app, self.request)\n\n            if self._session is None:\n                self._session = si.make_null_session(self.app)\n\n        return self._session\n\n    @property","sourceCodeStart":359,"sourceCodeEnd":395,"githubUrl":"https://github.com/pallets/flask/blob/3596b1ab61cea85edb8970e83ff61daa073facf8/src/flask/ctx.py#L359-L395","documentation":"The RequestContext.request property returns self._request, but raises RuntimeError('There is no request in this context.') when self._request is None. This happens when the context object is an app-level context or a request context that was created without a request (e.g. app.app_context() or a manually constructed RequestContext with no request bound).","triggerScenarios":"Accessing flask.request (or ctx.request) within an AppContext that has no request, or on a RequestContext whose _request is None. For example calling request in code running under with app.app_context(): only, or after the request object was not set during context construction.","commonSituations":"CLI commands and background jobs that push only an app context. Test helpers that use app_context() instead of test_request_context(). Code that touches request outside the request lifecycle.","solutions":["Use app.test_request_context() (or a real request) instead of app.app_context() when you need request access.","Guard access: only read flask.request inside view functions or within a pushed request context.","Move request-dependent logic into a view or a context where the request is bound."],"exampleFix":"# before\nwith app.app_context():\n    print(request.json)  # RuntimeError\n\n# after\nwith app.test_request_context('/api'):\n    print(request.json)","handlingStrategy":"type-guard","validationCode":"from flask import has_request_context\n\ndef can_access_request() -> bool:\n    return has_request_context()","typeGuard":"from flask import has_request_context\n\ndef in_request_context() -> bool:\n    return has_request_context()","tryCatchPattern":"from flask import request\nfrom flask.globals import request_ctx\ntry:\n    _ = request.data\nexcept RuntimeError:\n    # no request; handle gracefully\n    pass","preventionTips":["Use test_request_context() in tests and CLI code that touches request.","Restrict request access to view functions and request-bound callbacks."],"tags":["flask","request-context","lifecycle"],"backgroundTag":null,"analyzedSha":"3596b1ab61cea85edb8970e83ff61daa073facf8","analyzedAt":"2026-08-11T20:11:52.622Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}