Let exception fire or return None

Antoon Pardon antoon.pardon at rece.vub.ac.be
Thu Apr 30 14:30:34 CEST 2015

Op 30-04-15 om 09:43 schreef Cecil Westerhof:

> I have a function to fetch a message from a file:
>     def get_indexed_message(message_filename, index):
>         """
>         Get index message from a file, where 0 gets the first message
>         """
>         return open(expanduser(message_filename), 'r').readlines()[index].rstrip()
> What is more the Python way: let the exception fire like this code
> when index is to big, or catching it and returning None?
> I suppose working zero based is OK.

I think this is the wrong question. The right question i: What is the
most logical/consistent thing to do, within your project?

There are at least two ways to look at this.

1) Getting too large an index is very similar to getting an index with an empty
line and can be treated as such. In that case you might prefer to return an
empty line.

2) Getting too large an index indicates a problem that can't be handled here. In
that case you should let the exception propagate to where it can be handled.

2a) You view the IndexError as a good diagnostic, nothing more to do.
2b) You view the IndexError as an error specific to the implementation
and want an exception independent of your implementation: catch the
IndexError and raise one you specified yourself.

Antoon Pardon

More information about the Python-list mailing list