sixty-north/asq

negative index when using last() on OrderedQueryable

Closed this issue · 1 comments

$ python3
>>> from asq.initiators import query
>>> with open('/usr/bin/dict/words', 'r') as words_file:
>>>     words = query(words_file).select(str.strip).to_list()
...
>>> query(words).order_by(len).last()
Traceback (most recent call last):
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 2248, in __getitem__
    return self.element_at(index)
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 808, in element_at
    raise OutOfRangeError("Attempt to use negative index.")
asq.queryables.OutOfRangeError: Attempt to use negative index.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 1709, in _last
    return self._iterable[-1]
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 2250, in __getitem__
    raise IndexError(str(e))
IndexError: Attempt to use negative index.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 1704, in last
    return self._last() if predicate is None else self._last_predicate(predicate)
  File "/Users/rjs/dev/virtualenvs/meetup3/lib/python3.3/site-packages/asq/queryables.py", line 1711, in _last
    raise ValueError("Cannot return last() from an empty sequence.")
ValueError: Cannot return last() from an empty sequence.

What is the expected output? What do you see instead?


Please use labels and text to provide additional information.


Original issue reported on code.google.com by robert.smallshire@gmail.com on 12 Oct 2012 at 6:44

This appears to work now:

>>> from asq.initiators import query
>>> with open('/usr/share/dict/words', 'r') as words_file:
...     words = query(words_file).select(str.strip).to_list()
...     
>>> query(words).order_by(len).last()
'thyroparathyroidectomize'