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

Reply via email to