Python 2.5: wrong number of arguments given in TypeError for function argument aggregation (dictionary input vs the norm)

M.-A. Lemburg mal at egenix.com
Fri Oct 31 05:34:50 EDT 2008


On 2008-10-31 00:18, John Krukoff wrote:
> On Fri, 2008-10-31 at 08:55 +1000, James Mills wrote:
>> What you have discovered is not a bug :)
>>
>> cheers
>> James
>>
> 
> Are you sure? It looks like his complaint isn't that it doesn't work,
> but that the error message is misleading.
> 
> With the setup:
> 
> Python 2.5.2 (r252:60911, Sep 22 2008, 12:08:38) 
> [GCC 4.1.2 (Gentoo 4.1.2 p1.1)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>>>> def foo( a, b, c ):
> ...  pass
> ... 
> 
> Compare the error messages from:
> 
>>>> foo( **{ 'a' : 1, 'c' : 3 } )
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: foo() takes exactly 3 non-keyword arguments (1 given)
> 
> to the error message here:
> 
>>>> foo( **{ 'a' : 1, 'b' : 3 } )
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: foo() takes exactly 3 non-keyword arguments (2 given)

The (n given) notice refers to the number of keyword parameters
you specified in the call that could be associated with a
non-keyword arguments of the function.

I agree that this is a bit misleading.

Please open a bug report on python.org.

> Is it even possible to get an error message in terms of required keyword
> arguments? I seem to remember seeing a note about keyword only arguments
> recently...

You probably saw PEP 3102:

http://www.python.org/dev/peps/pep-3102/

That has a somewhat different focus though: it allows defining
keyword-only arguments, ie. ones that cannot be used as
both non-keyword parameter and keyword parameter (like we
have in Python 2.x).

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Oct 31 2008)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

:::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611



More information about the Python-list mailing list