On Wed, 21 Nov 2012 04:43:57 -0800, Giacomo Alzetta wrote: > I just came across this: > >>>> 'spam'.find('', 5) > -1 > > > Now, reading find's documentation: > >>>> print(str.find.__doc__) > S.find(sub [,start [,end]]) -> int > > Return the lowest index in S where substring sub is found, > such that sub is contained within S[start:end]. Optional arguments > start and end are interpreted as in slice notation. > > Return -1 on failure. > > Now, the empty string is a substring of every string so how can find > fail? > find, from the doc, should be generally be equivalent to > S[start:end].find(substring) + start, except if the substring is not > found but since the empty string is a substring of the empty string it > should never fail. > > Looking at the source code for find(in stringlib/find.h): > > Py_LOCAL_INLINE(Py_ssize_t) > stringlib_find(const STRINGLIB_CHAR* str, Py_ssize_t str_len, > const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, > Py_ssize_t offset) > { > Py_ssize_t pos; > > if (str_len < 0) > return -1; > > I believe it should be: > > if (str_len < 0) > return (sub_len == 0 ? 0 : -1); > > Is there any reason of having this unexpected behaviour or was this > simply overlooked?
why would you be searching for an empty string? what result would you expect to get from such a search? -- Turn your Pentium into an XT -- just add Windows! -- http://mail.python.org/mailman/listinfo/python-list