我有一个接受函数名称func,args和kwargs的对象,并且在某些时候运行
func(*args, **kwargs)
问题是,如果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
我确信有一个很好的方法可以解决这个问题,如果没有级联if语句检查是否存在args / kwargs,每个都有自己的函数调用,但我不知道如何。主要目标是将一个函数及其未知参数传递给一个对象,然后在一个方法中使用它们。
已编辑:为清晰起见添加了一个示例
答案 0 :(得分:8)
问题是,如果func不需要args / kwargs,则args / kwargs默认为None,这会导致TypeError。
事实并非如此:
def func1(*args, **kwargs)
print args, kwargs
将打印
() {}
相反,
def func2(): pass
可以完美地调用
func2(*(), **{})
所以只需更改您的args
和kwargs
变量即可。
答案 1 :(得分:1)
避免将您的args
和kwargs
默认为None
。
args
应该是一个元组:args = ()
kwargs
应该是一个词典:kwargs = {}