def safe_range(start, stop=None, step=None): if stop is None and step is None: if start > MAX_ITER_LENGTH: raise IterableTooLong("This range is too large.") return list(range(start)) elif stop is not None and step is None: if stop - start > MAX_ITER_LENGTH: raise IterableTooLong("This range is too large.") return list(range(start, stop)) elif stop is not None and step is not None: if (stop - start) / step > MAX_ITER_LENGTH: raise IterableTooLong("This range is too large.") return list(range(start, stop, step)) else: raise ValueError("Invalid arguments passed to range()")
def _eval_comprehension(self, node): iterable = self._eval(node.iter) if len(iterable) > MAX_ITER_LENGTH: raise IterableTooLong("This iterable is too long.") for item in iterable: self._assign(node.target, item, False) if all(self._eval(stmt) for stmt in node.ifs): yield item
def _eval_comprehension(self, node): iterable = self._eval(node.iter) if len(iterable) + self._loops > MAX_ITER_LENGTH: raise IterableTooLong("Execution limit exceeded: too many loops.") self._loops += len(iterable) for item in iterable: self._assign(node.target, item, False) if all(self._eval(stmt) for stmt in node.ifs): yield item