Skip to main content
 首页 » 编程设计

python之有没有一种方法可以在不调用 TypeError 的情况下使用错误数量的参数调用 Python 函数

2025年05月04日11小虾米

当您使用错误数量的参数调用函数,或者使用不在函数定义中的关键字参数时,您会得到 TypeError。我想要一段代码来获取回调并根据回调支持的内容使用可变参数调用它。一种方法是,对于回调 cb,使用 cb.__code__.cb_argcount 和 cb.__code__.co_varnames,但我宁愿将其抽象为类似 apply 的东西,但这只会应用“适合”的参数。

例如:

 def foo(x,y,z): 
   pass 
 
 cleanvoke(foo, 1)         # should call foo(1, None, None) 
 cleanvoke(foo, y=2)       # should call foo(None, 2, None) 
 cleanvoke(foo, 1,2,3,4,5) # should call foo(1, 2, 3) 
                           # etc. 

Python 中是否已经有类似的东西,或者我应该从头开始写?

请您参考如下方法:

与其自己深入研究细节,您可以 inspect函数的签名——您可能需要 inspect.getargspec(cb)。

我并不完全清楚您想如何使用该信息以及您拥有的参数来“正确地”调用该函数。为简单起见,假设您只关心简单的命名参数,并且您要传递的值在字典 d...

中
args = inspect.getargspec(cb)[0] 
cb( **dict((a,d.get(a)) for a in args) ) 

也许您想要更高级的东西,并且可以详细说明具体是什么?