{"record":{"id":"4f645f5fd6a6aab8","repo":"Textualize/textual","slug":"no-known-mode-mode-r","errorCode":null,"errorMessage":"No known mode {mode!r}","messagePattern":"No known mode (.+?)","errorType":"exception","errorClass":"UnknownModeError","httpStatus":null,"severity":"error","filePath":"src/textual/app.py","lineNumber":2649,"sourceCode":"        \"\"\"Switch to a given mode.\n\n        Args:\n            mode: The mode to switch to.\n\n        Returns:\n            An optionally awaitable object which waits for the screen associated\n                with the mode to be mounted.\n\n        Raises:\n            UnknownModeError: If trying to switch to an unknown mode.\n\n        \"\"\"\n\n        if mode == self._current_mode:\n            return AwaitMount(self.screen, [])\n\n        if mode not in self._modes:\n            raise UnknownModeError(f\"No known mode {mode!r}\")\n\n        self.delay_update()\n\n        self.screen.post_message(events.ScreenSuspend())\n        self.screen.refresh()\n\n        if mode not in self._screen_stacks:\n            await_mount = self._init_mode(mode)\n        else:\n            await_mount = AwaitMount(self.screen, [])\n\n        self._current_mode = mode\n        if self.screen._css_update_count != self._css_update_count:\n            self.refresh_css()\n\n        self.mode_change_signal.publish(mode)\n        self.screen_change_signal.publish(self.screen)\n","sourceCodeStart":2631,"sourceCodeEnd":2667,"githubUrl":"https://github.com/Textualize/textual/blob/06dbeef4bb70fb718236aa418ed658ef4667a126/src/textual/app.py#L2631-L2667","documentation":"UnknownModeError raised by App.switch_mode when the target mode name is not in self._modes, i.e. not declared in the MODES class variable nor added via add_mode().","triggerScenarios":"await app.switch_mode(\"settings\") with no \"settings\" key in MODES; typo in mode name; switching to a mode after remove_mode.","commonSituations":"Typos, dynamic mode names from config, or forgetting add_mode when modes are built at runtime.","solutions":["Declare the mode: add MODES = {\"settings\": SettingsScreen} to the App","Or at runtime: await app.add_mode(\"settings\", SettingsScreen) before switching","Verify mode names programmatically before switching"],"exampleFix":"# before\nclass MyApp(App):\n    MODES = {\"main\": MainScreen}\n# later:\nawait app.switch_mode(\"settings\")\n\n# after\nclass MyApp(App):\n    MODES = {\"main\": MainScreen, \"settings\": SettingsScreen}\nawait app.switch_mode(\"settings\")","handlingStrategy":"validation","validationCode":"if mode not in app._modes:\n    await app.add_mode(mode, DefaultScreen)\nawait app.switch_mode(mode)","typeGuard":null,"tryCatchPattern":"try:\n    await app.switch_mode(mode)\nexcept UnknownModeError:\n    await app.add_mode(mode, DefaultScreen)\n    await app.switch_mode(mode)","preventionTips":["Declare all modes in the MODES class variable","Derive mode names from a single constants module"],"tags":["modes","switch-mode","textual"],"backgroundTag":"unknown-mode-requested","analyzedSha":"06dbeef4bb70fb718236aa418ed658ef4667a126","analyzedAt":"2026-08-27T02:36:57.214Z","schemaVersion":2},"datasetVersion":"2026-08-27T03:17:27.898Z"}