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