Lightning-AI/pytorch-lightning · error · ValueError
Mismatch in number of limits ({len(limits)}) and number of i
Error message
Mismatch in number of limits ({len(limits)}) and number of iterables ({len(self.flattened)}) What it means
The CombinedLoader.limits setter accepts a scalar (broadcast to all loaders) or a list matching the number of flattened iterables; a list of any other length raises ValueError.
Source
Thrown at src/lightning/pytorch/utilities/combined_loader.py:334
if len(flattened) != len(self._flattened):
raise ValueError(
f"Mismatch in flattened length ({len(flattened)}) and existing length ({len(self._flattened)})"
)
# update the iterable collection
self._iterables = tree_unflatten(flattened, self._spec)
self._flattened = flattened
@property
def limits(self) -> Optional[list[Union[int, float]]]:
"""Optional limits per iterator."""
return self._limits
@limits.setter
def limits(self, limits: Optional[Union[int, float, list[Union[int, float]]]]) -> None:
if isinstance(limits, (int, float)):
limits = [limits] * len(self.flattened)
elif isinstance(limits, list) and len(limits) != len(self.flattened):
raise ValueError(
f"Mismatch in number of limits ({len(limits)}) and number of iterables ({len(self.flattened)})"
)
self._limits = limits
def __next__(self) -> _ITERATOR_RETURN:
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 = iteratorView on GitHub (pinned to 9fed5c27d2)
Solutions
- Pass a scalar: cl.limits = 0.5
- Ensure len(limits) == len(cl.flattened)
Example fix
# before cl.limits = [0.5, 0.5] # after cl.limits = 0.5 # applies to all loaders
Defensive patterns
Strategy: validation
Validate before calling
if isinstance(limits, list):
assert len(limits) == len(cl.flattened)
else: # scalar is fine
pass Prevention
- Use a scalar limit unless per-loader control is truly needed
When it happens
Trigger: combined_loader.limits = [0.5, 0.5] when there are 3 dataloaders.
Common situations: Percent-based limits hardcoded for a different number of loaders; loaders added dynamically.
Related errors
- Mismatch in number of limits ({len(limits)}) and number of i
- Mismatch in flattened length ({len(flattened)}) and existing
- Expected {n} items but only found {len(v)} for {k}
- `{type(self).__name__}` does not support the `CombinedLoader
- `trainer.predict()` only supports the `CombinedLoader(mode="
AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28).
Data as JSON: /api/errors/5242c4db4ee167d3.
Report an issue: GitHub.