Slicing outside the bounds of a sequence (at least for built-ins) doesn't cause an error. Indexing returns a single item, but slicing returns a subsequence of items. So when you try to index a nonexistent value, there's nothing to return; but when you slice a sequence outside of bounds, you can still return an empty sequence. For example:
>>> s = [1, 2, 3] >>> s[5:8] []
But if you just use an index out of bounds, it'll give you an error:
>>> s = [1, 2, 3] >>> s[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range