Ejemplo n.º 1
0
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()")
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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