2015-12-29 36 views
0

這是示例代碼不起作用。在Python3中使用kwargs作爲處理程序函數

#!/usr/bin/env python3 
def foobar(name, handlerFunction, **handlerArgs): 
    handlerFunction(name=name, handlerArgs) 


def _doSomething(name, **kwargs): 
    print(name) 
    print(kwargs) 


if __name__ == '__main__': 
    foobar(name='foo', handlerFunction=_doSomething) 
    sys.exit() 

這裏的要點是,_doSomething應該是可交換的。有時只有一個參數name,但有時會有多一個。

我得到這樣的錯誤。

File "./kwargs.py", line 4 
    handlerFunction(name=name, handlerArgs) 
           ^
SyntaxError: non-keyword arg after keyword arg 

或當我打電話時handlerFunction rearange在快譯通,handlerArgs,參數

File "./kwargs.py", line 13, in <module> 
    foobar(name='foo', handlerFunction=_doSomething) 
    File "./kwargs.py", line 4, in foobar 
    handlerFunction(handlerArgs, name=name) 
TypeError: _doSomething() got multiple values for argument 'name' 

回答

相關問題