brucegoodst...@gmail.com wrote:

Using a decorator works when named arguments are not used. When named arguments 
are used, unexpected keyword error is reported. Is there a simple fix?

Extend def wrapper(*args) to handle *kwargs as well

Emile

Code:
-----

from functools import wraps

def fix_args(fn):
    @wraps(fn)
    def wrapper(*args):
        args = (arg.replace('_', '') for arg in args)
        return fn(*args)
    return wrapper
@fix_args
def foo(a1="", a2="", b1="", b2=""):
     print(a1)
print(a2) print(b1) print(b2) foo ('a1a1_x', 'a2a2_x', 'b1b1_x', 'b2b2_____x')
foo (a1='a1a1_x', a2='a2a2_x', b1='b1b1_x', b2='b2b2_____x')

Results:
--------
a1a1x
a2a2x
b1b1x
b2b2x
Traceback (most recent call last):
  File "C:\WORK\masterDB_Update\argtest.py", line 19, in <module>
    foo (a1='a1a1_x', a2='a2a2_x', b1='b1b1_x', b2='b2b2_____x')
TypeError: wrapper() got an unexpected keyword argument 'a1'

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to