Function to determine list max without itertools

Grant Edwards grant.b.edwards at gmail.com
Mon Apr 22 10:44:05 EDT 2019


On 2019-04-20, Michael Torrie <torriem at gmail.com> wrote:
> On 04/19/2019 04:01 AM, Sayth Renshaw wrote:
>> def max_try(listarg):
>>     myMax = listarg[0]
>>     try:
>>         for item in listarg:
>>             if item > myMax:
>>                 myMax = item
>>     except TypeError:
>>         print(f'Only numbers are supported, this entry "{item}" was not')
>>         pass
>> 
>>     return myMax
>
> If I were you I wouldn't catch that exception.  The reason is that a
> non-number is something your code just can't handle correctly anyway, so
> better to let that original exception bubble up to the caller who can
> deal with it.  By catching this exception, your code will fail, but
> still return as if it succeeded.
>
> Others may disagree. But I rarely catch exceptions in my code unless my
> code specifically wants or needs to deal with them.

I agree: In general, in a function, you only catch an exception if you
can _fix_ the problem.  [Though there may be some some cases where you
want to log the exception in some specific manner and re-raise it.]
If the function can't fix the problem, then leave it to the caller to
decide what to do about it.

At the very top level _sometimes_ you want to have one single, global,
try/except to catch all exceptions and handle the nofication and exit
in a non-default way.  For example: in a GUI application, it's
possible that nobody will see an excption message and stack trace
that's sent to stderr.  A good GUI framework would already handle
that, but not all do.

-- 
Grant Edwards               grant.b.edwards        Yow! How many retured
                                  at               bricklayers from FLORIDA
                              gmail.com            are out purchasing PENCIL
                                                   SHARPENERS right NOW??



More information about the Python-list mailing list