No results leads to a negative offset in the slice

... which causes problems for some list like objects (not the built-in list though).  To fix, I just reversed the order of these lines:
```
self._page = max(1, self._page) # handle negative page
self._page = min(self._page, self.total_pages) # handle page too large
```
... so that zero results still leaves you on page 1.

Also I run into multiple different unintended exceptions getting caught by this TypeError handler, so I thought we could maybe test with getattr instead?