传递未知的args和kwargs在python中运行

jim*_*ist 5 python

我有一个对象,它接受一个函数名func,args和kwargs,并在某些时候运行

func(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

问题是,如果func不需要args/kwargs,则args/kwargs默认为None,这会导致TypeError.例如,如果函数不需要参数,则args,kwargs默认为None:

def test():
    pass

args = None

kwargs = None

test(*args, **kwargs)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-b9618694fbf2> in <module>()
----> 1 test(*args, **kwargs)

TypeError: test() argument after ** must be a mapping, not NoneType
Run Code Online (Sandbox Code Playgroud)

我确定有一个很好的方法来解决这个问题,如果没有级联if语句检查是否存在args/kwargs,每个都有自己的函数调用,但我不知道如何.主要目标是将一个函数及其未知参数传递给一个对象,然后在一个方法中使用它们.

编辑:为了清晰起见添加了一个例子

glg*_*lgl 8

问题是,如果func不需要args/kwargs,则args/kwargs默认为None,这会导致TypeError.

这不是真的:

def func1(*args, **kwargs)
    print args, kwargs
Run Code Online (Sandbox Code Playgroud)

将打印

() {}
Run Code Online (Sandbox Code Playgroud)

相反,

def func2(): pass
Run Code Online (Sandbox Code Playgroud)

可以完美地称之为

func2(*(), **{})
Run Code Online (Sandbox Code Playgroud)

因此,只要改变你argskwargs变量,你的罚款.