On Sun, 2009-02-22 at 12:09 -0800, Ravi wrote: > I am sorry about the typo mistake, well the code snippets are as: > > # Non Working: > > class X(object): > def f(self, **kwds): > print kwds > try: > print kwds['i'] * 2 > except KeyError: > print "unknown keyword argument" > self.g("string", kwds) > > def g(self, s, **kwds): > print s > print kwds > > if __name__ == "__main__": > x = X() > x.f(k = 2, j = 10) > > > # Working One > > class X(object): > def f(self, **kwds): > print kwds > try: > print kwds['i'] * 2 > except KeyError: > print "unknown keyword argument" > self.g("string", **kwds) > > def g(self, s, **kwds): > print s > print kwds > > if __name__ == "__main__": > x = X() > x.f(k = 2, j = 10)
Same reasoning, though admittedly the error text is misleading. This example can be simplified as: def foo(x, **kwargs): pass >>> foo(1, {'boys': 5, 'girls': 10}) ==> TypeError: foo() takes exactly 1 argument (2 given) Again misleading, but the argument is the same (no pun intended). However the following would have worked: >>> foo(1, **{'boys': 5, 'girls': 10}) or >>> foo(1, boys=5, girls=10) -- http://mail.python.org/mailman/listinfo/python-list