{"record":{"id":"e0c90ab0966d9814","repo":"Lightning-AI/pytorch-lightning","slug":"you-cannot-pass-train-dataloader-or-val-datalo","errorCode":null,"errorMessage":"\"You cannot pass `train_dataloader` or `val_dataloaders` to `trainer.fit(datamodule=...)`\"","messagePattern":"\"You cannot pass `train_dataloader` or `val_dataloaders` to `trainer\\.fit\\(datamodule=\\.\\.\\.\\)`\"","errorType":"validation","errorClass":"MisconfigurationException","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/trainer/trainer.py","lineNumber":618,"sourceCode":"\n    def _fit_impl(\n        self,\n        model: \"pl.LightningModule\",\n        train_dataloaders: Optional[Union[TRAIN_DATALOADERS, LightningDataModule]] = None,\n        val_dataloaders: Optional[EVAL_DATALOADERS] = None,\n        datamodule: Optional[LightningDataModule] = None,\n        ckpt_path: Optional[_PATH] = None,\n        weights_only: Optional[bool] = None,\n    ) -> None:\n        log.debug(f\"{self.__class__.__name__}: trainer fit stage\")\n\n        # if a datamodule comes in as the second arg, then fix it for the user\n        if isinstance(train_dataloaders, LightningDataModule):\n            datamodule = train_dataloaders\n            train_dataloaders = None\n        # If you supply a datamodule you can't supply train_dataloader or val_dataloaders\n        if (train_dataloaders is not None or val_dataloaders is not None) and datamodule is not None:\n            raise MisconfigurationException(\n                \"You cannot pass `train_dataloader` or `val_dataloaders` to `trainer.fit(datamodule=...)`\"\n            )\n\n        # links data to the trainer\n        self._data_connector.attach_data(\n            model, train_dataloaders=train_dataloaders, val_dataloaders=val_dataloaders, datamodule=datamodule\n        )\n\n        assert self.state.fn is not None\n        if _is_registry(ckpt_path) and module_available(\"litmodels\"):\n            download_model_from_registry(ckpt_path, self)\n        ckpt_path = self._checkpoint_connector._select_ckpt_path(\n            self.state.fn,\n            ckpt_path,\n            model_provided=True,\n            model_connected=self.lightning_module is not None,\n        )\n        self._run(model, ckpt_path=ckpt_path, weights_only=weights_only)","sourceCodeStart":600,"sourceCodeEnd":636,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/trainer/trainer.py#L600-L636","documentation":"trainer.fit() was called with both a datamodule and explicit train_dataloaders/val_dataloaders. Lightning cannot decide which data source to use, so it raises MisconfigurationException. Note that a LightningDataModule passed positionally is detected and reassigned, but explicit dataloaders alongside a datamodule keyword are not allowed.","triggerScenarios":"trainer.fit(model, train_dataloaders=train_loader, datamodule=dm) or trainer.fit(model, val_dataloaders=..., datamodule=dm); also trainer.fit(model, dm, train_dataloaders=...).","commonSituations":"Gradually migrating from dataloaders to a LightningDataModule and leaving old dataloader arguments in the fit call, or template code combining both.","solutions":["Remove the dataloader arguments and let the datamodule provide train_dataloaders()/val_dataloaders()","Or remove datamodule= and pass dataloaders directly"],"exampleFix":"# before\ntrainer.fit(model, train_dataloaders=train_loader, datamodule=dm)\n# after\ntrainer.fit(model, datamodule=dm)","handlingStrategy":"validation","validationCode":"if datamodule is not None:\n    assert train_dataloaders is None and val_dataloaders is None, \"pass either datamodule or dataloaders, not both\"\ntrainer.fit(model, datamodule=datamodule)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Adopt one data pattern (datamodule OR dataloaders) per project","Wrap fit calls in a thin helper that enforces mutual exclusion"],"tags":["trainer","fit","datamodule","dataloader","misconfiguration","pytorch-lightning"],"backgroundTag":"conflicting-data-source-arguments","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}