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

John Krukoff jkrukoff at ltgc.com
Thu Oct 30 19:18:20 EDT 2008


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)

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...

-- 
John Krukoff <jkrukoff at ltgc.com>
Land Title Guarantee Company





More information about the Python-list mailing list