Il giorno giovedì 22 novembre 2012 05:00:39 UTC+1, MRAB ha scritto:
> On 2012-11-22 03:41, Terry Reedy wrote:
> It can't return 5 because 5 isn't an index in 'spam'.
>
>
>
> It can't return 4 because 4 is below the start index.
Uhm. Maybe you are right, because returning a greater value would cause an
IndexError, but then, *why* is 4 returned???
>>> 'spam'.find('', 4)
4
>>> 'spam'[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
4 is not a valid index either. I do not think the behaviour was completely
intentional. If find should return indexes than 'spam'.find('', 4) must be -1,
because 4 is not a valid index. If find should behave as if creating the slice
and checking if the substring is in the slice than 'spam'.find('', i) should
return i for every integer >= 4.
The docstring does not describe this edge case, so I think it could be improved.
If the first sentence(being an index in S) is kept, than it shouldn't say that
start and end are treated as in slice notation, because that's actually not
true. It should be added if start is greater or equal to len(S) then -1 is
always returned(and in this case 'spam'.find('', 4) -> -1).
If find should not guarantee that the value returned is a valid index(when
start isn't a valid index), then the first sentence should be rephrased to
avoid giving this idea(and the comparisons in stringlib/find.h should be
swapped to have the correct behaviour).
For example, maybe, it could be "Return the lowest index where substring sub is
found (in S?), such that sub is contained in S[start:end]. ...
--
http://mail.python.org/mailman/listinfo/python-list