Lightning-AI/pytorch-lightning · error · TypeError
f"An invalid dataloader was passed to `Trainer.{trainer_fn.v
Error message
f"An invalid dataloader was passed to `Trainer.{trainer_fn.value}({prefix}dataloaders=...)`." f" Found {dataloader}." What it means
TypeError from _check_dataloaders_every_n_epochs-adjacent _check_dataloader_iterable during setup_data: iter(dataloader) raised TypeError (object has no __iter__) and the dataloader does not come from an overridden method on the module/datamodule, so Lightning cannot give method-specific advice. The passed object is simply not iterable — not a DataLoader-like or dataset.
Source
Thrown at src/lightning/pytorch/trainer/connectors/data_connector.py:400
return self.model
def _check_dataloader_iterable(
dataloader: object,
source: _DataLoaderSource,
trainer_fn: TrainerFn,
) -> None:
if isinstance(dataloader, DataLoader):
# Fast path: `torch.utils.data.DataLoader` is always iterable, calling iter() would be expensive
return
try:
iter(dataloader) # type: ignore[call-overload]
except TypeError:
# A prefix in the message to disambiguate between the train- and (optional) val dataloader that .fit() accepts
prefix = "train_" if trainer_fn == TrainerFn.FITTING else ""
if not source.is_module():
raise TypeError(
f"An invalid dataloader was passed to `Trainer.{trainer_fn.value}({prefix}dataloaders=...)`."
f" Found {dataloader}."
)
if not is_overridden(source.name, source.instance):
raise TypeError(
f"An invalid dataloader was passed to `Trainer.{trainer_fn.value}({prefix}dataloaders=...)`."
f" Found {dataloader}."
f" Either pass the dataloader to the `.{trainer_fn.value}()` method OR implement"
f" `def {source.name}(self):` in your LightningModule/LightningDataModule."
)
raise TypeError(
f"An invalid dataloader was returned from `{type(source.instance).__name__}.{source.name}()`."
f" Found {dataloader}."
)
def _worker_check(trainer: "pl.Trainer", dataloader: object, name: str) -> None:
if not isinstance(dataloader, DataLoader):View on GitHub (pinned to 9fed5c27d2)
Solutions
- Wrap in a DataLoader: from torch.utils.data import DataLoader; DataLoader(ds, batch_size=32)
- For HF datasets: trainer.fit(model, train_dataloaders=ds.to_iterable_dataset()) or construct a DataLoader over it
- Return the dataloader from train_dataloader()/val_dataloader() on the LightningModule/DataModule instead of passing a non-iterable object
Example fix
# before
from datasets import load_dataset
ds = load_dataset("mnist", split="train")
trainer.fit(model, train_dataloaders=ds) # not iterable
# after
trainer.fit(model, train_dataloaders=DataLoader(ds, batch_size=32))
# or
trainer.fit(model, train_dataloaders=ds.to_iterable_dataset()) Defensive patterns
Strategy: type-guard
Validate before calling
from torch.utils.data import DataLoader
if not hasattr(dataloaders, "__iter__"):
dataloaders = DataLoader(dataloaders, batch_size=32)
trainer.fit(model, train_dataloaders=dataloaders) Type guard
def is_iterable_dataloader(dl) -> bool:
try:
iter(dl)
return True
except TypeError:
return False Try / catch
try:
trainer.fit(model, train_dataloaders=ds)
except TypeError as e:
if "invalid dataloader" in str(e):
trainer.fit(model, train_dataloaders=DataLoader(ds, batch_size=32))
else:
raise Prevention
- Always hand Trainer a DataLoader or IterableDataset
- For HF datasets use .to_iterable_dataset() or wrap in DataLoader
- Add a smoke check that iter(dataloader) works before fit
When it happens
Trigger: Passing a HuggingFace datasets.Dataset (not IterableDataset), a numpy array, a torch Tensor, or a plain object to trainer.fit(model, train_dataloaders=ds); also datasets without __iter__/__len__ protocols.
Common situations: Assuming HF datasets or tensors are accepted directly; passing a Dataset class instead of an instantiated DataLoader; wrapping data objects that only support indexing.
Related errors
- f"An invalid dataloader was passed to `Trainer.{trainer_fn.v
- `name` must be a str, found {name}
- The dataloader {dataloader} needs to subclass `torch.utils.d
- You seem to have configured a sampler in your DataLoader whi
- Expected `torch.nn.Module` or `torch.optim.Optimizer`, got:
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/f434f41a1a9fccc7.
Report an issue: GitHub.