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 = iterator

View on GitHub (pinned to 9fed5c27d2)

Solutions

  1. Pass a scalar: cl.limits = 0.5
  2. 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

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


AI-assisted analysis of Lightning-AI/pytorch-lightning@9fed5c27d2 (2026-08-28). Data as JSON: /api/errors/5242c4db4ee167d3. Report an issue: GitHub.