{"record":{"id":"b26d0ef236ef2368","repo":"Textualize/textual","slug":"unknown-mode-mode-r","errorCode":null,"errorMessage":"Unknown mode {mode!r}","messagePattern":"Unknown mode (.+?)","errorType":"exception","errorClass":"UnknownModeError","httpStatus":null,"severity":"warning","filePath":"src/textual/app.py","lineNumber":2714,"sourceCode":"            )\n        self._modes[mode] = base_screen\n\n    def remove_mode(self, mode: str) -> AwaitComplete:\n        \"\"\"Removes a mode from the app.\n\n        Screens that are running in the stack of that mode are scheduled for pruning.\n\n        Args:\n            mode: The mode to remove. It can't be the active mode.\n\n        Raises:\n            ActiveModeError: If trying to remove the active mode.\n            UnknownModeError: If trying to remove an unknown mode.\n        \"\"\"\n        if mode == self._current_mode:\n            raise ActiveModeError(f\"Can't remove active mode {mode!r}\")\n        elif mode not in self._modes:\n            raise UnknownModeError(f\"Unknown mode {mode!r}\")\n        else:\n            del self._modes[mode]\n\n        if mode not in self._screen_stacks:\n            return AwaitComplete.nothing()\n\n        stack = self._screen_stacks[mode]\n        del self._screen_stacks[mode]\n\n        async def remove_screens() -> None:\n            \"\"\"Remove screens.\"\"\"\n            for screen in reversed(stack):\n                await self._replace_screen(screen)\n\n        return AwaitComplete(remove_screens()).call_next(self)\n\n    def is_screen_installed(self, screen: Screen | str) -> bool:\n        \"\"\"Check if a given screen has been installed.","sourceCodeStart":2696,"sourceCodeEnd":2732,"githubUrl":"https://github.com/Textualize/textual/blob/06dbeef4bb70fb718236aa418ed658ef4667a126/src/textual/app.py#L2696-L2732","documentation":"UnknownModeError raised by App.remove_mode when the named mode is not in self._modes — it was never registered or already removed.","triggerScenarios":"await app.remove_mode(\"editor\") when 'editor' is not a key of _modes; double-removal; typo in name.","commonSituations":"Cleanup code that removes modes defensively but blindly; races where another task already removed the mode.","solutions":["Guard with membership check: if mode in app._modes and mode != app._current_mode: await app.remove_mode(mode)","Catch textual.app.UnknownModeError for fire-and-forget cleanup"],"exampleFix":"# before\nawait app.remove_mode(\"editor\")  # may not exist\n\n# after\nif \"editor\" in app._modes:\n    await app.remove_mode(\"editor\")","handlingStrategy":"try-catch","validationCode":"if mode in app._modes:\n    await app.remove_mode(mode)","typeGuard":null,"tryCatchPattern":"try:\n    await app.remove_mode(mode)\nexcept UnknownModeError:\n    pass  # already gone","preventionTips":["Membership-check before removal","Treat double-removal as a no-op in cleanup code"],"tags":["modes","unknown-mode","textual"],"backgroundTag":"unknown-mode-requested","analyzedSha":"06dbeef4bb70fb718236aa418ed658ef4667a126","analyzedAt":"2026-08-27T02:36:57.214Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}