list index()

Campbell Barton cbarton at metavr.com
Tue Sep 4 04:50:24 EDT 2007


Jason wrote:
> On Aug 30, 1:27 am, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
>> On Thu, 30 Aug 2007 17:09:36 +1000, Ben Finney wrote:
>>> zzbba... at aol.com writes:
>>>> What's with the index() function of lists throwing an exception on not
>>>> found?
>>> It's letting you know that the item isn't in the list. There's no
>>> sensible return value from an "index" function in that condition.
>> What about -1?  C programmers do this all the time.  :-)
>>
>> Ciao,
>>         Marc 'BlackJack' Rintsch
> 
> As other people pointed out, C doesn't have exceptions, so a C
> programmer must make an in/out parameter to indicate an error, or have
> a special return value.  In Python, you're most often searching the
> list for an object which is in the list, so the lack of the object is
> an exceptional condition.  You can certain check with the "in"
> operator beforehand to avoid the exception.  You may also subclass a
> list and override the index method, or write a standalone function to
> catch the exception and change its value.
> 
> The reason why the exception is more Pythonic is that the return value
> is always a guaranteed good index into the list.  Any errors
> (including calling .index() on a non-list instance that doesn't have
> a .index method) are exceptional, and should probably follow a very
> different code path.
> 
> Returning -1 is not a good return value to indicate an error.  After
> all, -1 is a valid index in most Python lists.  (Negative numbers
> index from the tail of the list.)
> 
>   --Jason

Agree in general tho its a bit inconsistent how...

"string".find(val)

...can return -1 but .index() cant, though the inconsistency is probably 
with string since most other areas of the py api raise errors in cases 
like this.



More information about the Python-list mailing list