{"record":{"id":"559be418b9cd682e","repo":"Lightning-AI/pytorch-lightning","slug":"setup-dataloaders-requires-at-least-one-dataload","errorCode":null,"errorMessage":"`setup_dataloaders` requires at least one dataloader as input.","messagePattern":"`setup_dataloaders` requires at least one dataloader as input\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/lightning/fabric/fabric.py","lineNumber":1247,"sourceCode":"            )\n\n        if not optimizers:\n            raise ValueError(\"`setup_optimizers` requires at least one optimizer as input.\")\n\n        if any(isinstance(opt, _FabricOptimizer) for opt in optimizers):\n            raise ValueError(\"An optimizer should be passed only once to the `setup_optimizers` method.\")\n\n        if any(_has_meta_device_parameters_or_buffers(optimizer) for optimizer in optimizers):\n            raise RuntimeError(\n                \"The optimizer has references to the model's meta-device parameters. Materializing them is\"\n                \" is currently not supported. Create the optimizer after setting up the model, then call\"\n                \" `fabric.setup_optimizers(optimizer)`.\"\n            )\n\n    def _validate_setup_dataloaders(self, dataloaders: Sequence[DataLoader]) -> None:\n        self._validate_launched()\n        if not dataloaders:\n            raise ValueError(\"`setup_dataloaders` requires at least one dataloader as input.\")\n\n        if any(isinstance(dl, _FabricDataLoader) for dl in dataloaders):\n            raise ValueError(\"A dataloader should be passed only once to the `setup_dataloaders` method.\")\n\n        if any(not isinstance(dl, DataLoader) for dl in dataloaders):\n            raise TypeError(\"Only PyTorch DataLoader are currently supported in `setup_dataloaders`.\")\n\n    @staticmethod\n    def _configure_callbacks(callbacks: Optional[Union[list[Any], Any]]) -> list[Any]:\n        callbacks = callbacks if callbacks is not None else []\n        callbacks = callbacks if isinstance(callbacks, list) else [callbacks]\n        callbacks.extend(_load_external_callbacks(\"lightning.fabric.callbacks_factory\"))\n        return callbacks\n","sourceCodeStart":1229,"sourceCodeEnd":1261,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/fabric/fabric.py#L1229-L1261","documentation":"Raised by `_validate_setup_dataloaders` when `fabric.setup_dataloaders()` is called with an empty sequence. Fabric needs at least one dataloader to wrap it in `_FabricDataLoader` and prepare it for the distributed strategy.","triggerScenarios":"Calling `fabric.setup_dataloaders()` with no args, or with an empty list, e.g. when building dataloaders conditionally and the list is empty at runtime.","commonSituations":"Evaluation-only or inference scripts adapted from training scripts where the val/test dataloader list may be empty; loops constructing dataloaders per split.","solutions":["Pass at least one `torch.utils.data.DataLoader`, e.g. `train_dl = fabric.setup_dataloaders(DataLoader(train_ds, batch_size=32))`","Guard the call: only invoke setup_dataloaders when the dataloader list is non-empty","Check upstream logic that builds the dataloader list for bugs that empty it"],"exampleFix":"# before\nloaders = [dl for dl in maybe_dataloaders if dl is not None]\nfabric.setup_dataloaders(*loaders)  # may be empty\n\n# after\nif loaders:\n    loaders = fabric.setup_dataloaders(*loaders)","handlingStrategy":"validation","validationCode":"if dataloaders:\n    dataloaders = fabric.setup_dataloaders(*dataloaders)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Guard setup calls on non-empty collections","Log the number of dataloaders built per split"],"tags":["pytorch-lightning","fabric","dataloader","validation"],"backgroundTag":"empty-argument-validation","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}