{"record":{"id":"ee412d29b4c432be","repo":"reflex-dev/reflex","slug":"rx-match-should-have-at-least-one-case","errorCode":null,"errorMessage":"rx.match should have at least one case.","messagePattern":"rx\\.match should have at least one case\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-components-core/src/reflex_components_core/core/match.py","lineNumber":102,"sourceCode":"\n    @classmethod\n    def _process_cases(\n        cls, cases: list\n    ) -> tuple[list[tuple], Var | BaseComponent | None]:\n        \"\"\"Process the list of match cases and the catchall default case.\n\n        Args:\n            cases: The list of match cases.\n\n        Returns:\n            The default case and the list of match case tuples.\n\n        Raises:\n            ValueError: If there are multiple default cases.\n        \"\"\"\n        if not cases:\n            msg = \"rx.match should have at least one case.\"\n            raise ValueError(msg)\n\n        if not isinstance(cases[-1], tuple):\n            *cases, default_return = cases\n            default_return = (\n                cls._create_case_var_with_var_data(default_return)\n                if not isinstance(default_return, BaseComponent)\n                else default_return\n            )\n        else:\n            default_return = None\n\n        if any(case for case in cases if not isinstance(case, tuple)):\n            msg = \"rx.match should have tuples of cases and one default case as the last argument.\"\n            raise ValueError(msg)\n\n        if not cases:\n            msg = \"rx.match should have at least one case.\"\n            raise ValueError(msg)","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-components-core/src/reflex_components_core/core/match.py#L84-L120","documentation":"`rx.match` requires at least one (condition, value) tuple case plus optionally a trailing default. Calling it with an empty argument list after the condition (or where the default consumed the only argument) leaves no cases to evaluate and raises ValueError.","triggerScenarios":"`rx.match(State.x)` with no cases; `rx.match(State.x, 'fallback')` where the lone string is consumed as the default, leaving zero tuple cases (this site raises the empty-cases error when tuples list ends up empty).","commonSituations":"Programmatically building the case list from data that turns out empty; refactoring removes all cases but leaves the call.","solutions":["Provide at least one (pattern, value) tuple: rx.match(State.x, ('a', 1), 0)","When generating cases dynamically, assert non-empty before calling: assert cases, 'need >=1 match case'","Keep the trailing default after at least one tuple"],"exampleFix":"# before\nrx.match(State.level, 'none')  # no tuple cases\n# after\nrx.match(State.level, ('high', 3), ('low', 1), 0)","handlingStrategy":"validation","validationCode":"assert cases, 'rx.match requires at least one (pattern, value) tuple'\nresult = rx.match(State.x, *cases, default)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never call rx.match without at least one tuple case","When building cases from data, fall back to a plain value if the list is empty"],"tags":["reflex","match","missing-cases"],"backgroundTag":"missing-required-argument","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}