[Python-Dev] Re: string.find() again (was Re: timsort for jython)
Raymond Hettinger
python@rcn.com
Thu, 8 Aug 2002 19:29:56 -0400
GvR:
> > I think we've argued about '' in 'abc' long enough. Tim has failed to
> > convince me, so '' in 'abc' returns True. Barry has checked it all
> > in.
Ka-Ping:
> My personal opinion sides with Tim -- i think an exception is definitely
> the right choice. (I still haven't seen convincing examples where True
> is a more useful result than an exception, and the fact that there is
> doubt suggests that it is an exceptional case.)
I think Barry and GvR are on the right track.
My gut feeling is that it is best to stay with the mathematical view that
the null set is a subset of every other set. It doesn't seem to have hurt the
world of regular expressions where re.match('', 'abc') returns a match
object. Likewise, the truth of "abc" ~ "" is not on the wart list for AWK.
Excel and Lotus have both return non-zero for FIND("","abc").
Though errors should not pass silently, we are talking about an error
that is possibly very far upstream from the membership check:
potentialsub = complicatedfunction(*manyvars) #semantic error here
<much other computation here ...>
if potentialsub in astring: # why raise an exception way down here
handle_inclusion()
else:
handle_exclusion()
'in' should not be responsible for suggesting that complicatedfunction()
doesn't know what it is doing. If there is an error, it isn't the membership
check; rather, it is a semantic problem with the function. Accordingly,
the postcondition for the function belongs at the tail of the function and
not as a precondition for the use of the result. Otherwise, the exception
and its cause are too far apart (as in the example above).
Raymond Hettinger