我有一个对象,它接受一个函数名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,每个都有自己的函数调用,但我不知道如何.主要目标是将一个函数及其未知参数传递给一个对象,然后在一个方法中使用它们.
编辑:为了清晰起见添加了一个例子
问题是,如果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)
因此,只要改变你args和kwargs变量,你的罚款.