On 12/4/2017 1:54 PM, Jason Maldonis wrote:
I was extending a `list` and am wondering why slicing lists will never
raise an IndexError, even if the `slice.stop` value if greater than the
list length.

Is there any background on why that doesn't raise an IndexError?

Slicing is perhaps most commonly used on strings, and clamping is probably most useful for strings.

Example 1: s[0:k] gets the k or fewer initial characters of the string, perhaps to put in a fixed-width display or storage field.

Example 2: below are two equivalent (I believe) code snippets.

try:
    item = seq[n]
except IndexError
    do_without_item()
else:
    process(item)

item = seq[n:n+1]
if item:
    process(item)
else:
    do_without_item()

Many prefer the second. Note that moving process(item) in the first into the try clause makes the two non-equivalent.

Example 3:

'if s[k:k+1] in okset' versus 'if len(s) >= k+1 and s[k] in okset'.

There are many examples like this where is slicing did not clamp, the user would have to reproduce some of the logic done by slices.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to