function that accepts any amount of arguments?

Steve Holden steve at holdenweb.com
Thu Apr 24 21:36:16 CEST 2008


member thudfoo wrote:
> On 4/24/08, Jonathan Gardner <jgardner at jonathangardner.net> wrote:
>> On Apr 24, 5:28 am, malkarouri <malkaro... at gmail.com> wrote:
>>  >
>>  > What's wrong with raising ZeroDivisionError (not stopping the
>>  > exception in the first place)?
>>  >
>>
>>
>> Because when I use your module, call avg (or mean) without args, I
>>  should see an error that says, "Hey, you have to pass at least one
>>  value in!"
>>
>>  ZeroDivisonError doesn't mean that. It means I tried to divide by
>>  zero. Naively, I don't see where I was dividing by zero (because I
>>  don't remember how to calculate the mean---that's what your code was
>>  for.)
>>
>>  ValueError does mean that I didn't pass the right kind of arguments
>>  in. ValueError("No items specified") would be even clearer. (Or maybe
>>  TypeError?)
>>
>>  In general, any exception thrown should be meaningful to the code you
>>  are throwing it to. That means they aren't familiar with how your code
>>  works.
>>
> 
> [source]|557> def average(n, *ints):
>         |...>     return (sum(ints)+n) / (len(ints) + 1)
>         |...>
> [source]|558> average (1,2,3)
>         <558> 2
> [source]|559> average(3)
>         <559> 3
> [source]|560> average(1,2)
>         <560> 1
> [source]|561> average(0)
>         <561> 0
> [source]|562> average()
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
> 
> /usr/share/doc/packages/python-dateutil/source/<ipython console> in <module>()
> 
> TypeError: average() takes at least 1 argument (0 given)
> --
> http://mail.python.org/mailman/listinfo/python-list
> 
It would also be usual to use floating arithmetic to ensure that the 
mean of 1 and 2 was 1.5 rather than 1.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list