Lightning-AI/pytorch-lightning · error · RuntimeError
Please call `iter(combined_loader)` first.
Error message
Please call `iter(combined_loader)` first.
What it means
CombinedLoader.__len__ requires an active iterator because length depends on the combination mode's iterator state. Calling len() before iter(combined_loader) raises RuntimeError.
Source
Thrown at src/lightning/pytorch/utilities/combined_loader.py:358
assert self._iterator is not None
out = next(self._iterator)
if isinstance(self._iterator, _Sequential):
return out
out, batch_idx, dataloader_idx = out
return tree_unflatten(out, self._spec), batch_idx, dataloader_idx
@override
def __iter__(self) -> Self:
cls = _SUPPORTED_MODES[self._mode]["iterator"]
iterator = cls(self.flattened, self._limits)
iter(iterator)
self._iterator = iterator
return self
def __len__(self) -> int:
"""Compute the number of batches."""
if self._iterator is None:
raise RuntimeError("Please call `iter(combined_loader)` first.")
return len(self._iterator)
def reset(self) -> None:
"""Reset the state and shutdown any workers."""
if self._iterator is not None:
self._iterator.reset()
self._iterator = None
for iterable in self.flattened:
_shutdown_workers_and_reset_iterator(iterable)
def _dataset_length(self) -> int:
"""Compute the total length of the datasets according to the current mode."""
datasets = [getattr(dl, "dataset", None) for dl in self.flattened]
lengths = [length for ds in datasets if (length := sized_len(ds)) is not None]
if not lengths:
raise NotImplementedError("All datasets are iterable-style datasets.")
fn = _SUPPORTED_MODES[self._mode]["fn"]
return fn(lengths)View on GitHub (pinned to 9fed5c27d2)
Solutions
- Call it = iter(cl) first, then len(cl) works
- Or loop over the loader once (for-loop implicitly calls iter) before checking length
Example fix
# before cl = CombinedLoader([dl1, dl2]) n = len(cl) # RuntimeError # after it = iter(cl) n = len(cl)
Defensive patterns
Strategy: validation
Validate before calling
assert cl._iterator is not None, "call iter(cl) before len(cl)"
Try / catch
try:
n = len(cl)
except RuntimeError:
_ = iter(cl)
n = len(cl) Prevention
- Initialize iteration before any length queries in setup/inspection code
When it happens
Trigger: cl = CombinedLoader(...); len(cl) without ever calling iter(cl) or looping over it.
Common situations: Inspecting loader length right after construction; calling len() in setup() before iteration begins.
Related errors
- `{type(self).__name__}` does not support the `CombinedLoader
- `trainer.predict()` only supports the `CombinedLoader(mode="
- Mismatch in number of limits ({len(limits)}) and number of i
- Unsupported mode {mode!r}, please select one of: {list(_SUPP
- Mismatch in flattened length ({len(flattened)}) and existing
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/ae9c96571cab412f.
Report an issue: GitHub.