是否可以调用一个回调函数,它可以声明没有参数但是在调用时传递一些参数而不引发异常?

时间:2018-01-27 10:26:35

标签: python callback

是否可以在不提出异常的情况下使用以下代码? hello函数表示我无法控制的代码。这只是为了清楚起见。

def hello():
    print("hellowed")

def callsCallback(callback):
    callback(*["dd"])

callsCallback(hello)

这个想法是让库在某些事情发生时接收回调函数。为了向后兼容,被调用的函数可能会也可能不会接收参数。

我知道这个答案:How can I find the number of arguments of a Python function?但我宁愿避免检查,如果可以的话。

1 个答案:

答案 0 :(得分:0)

如果在包装函数中使用了*args,那么由于参数数量不正确,它永远不会抛出异常。

def hello():
    print("hellowed")

def wrapper(f):
    def g(*args):
        f() 
    return g

def callsCallback(callback):
    callback = wrapper(callback)
    callback(*["dd"])

callsCallback(hello)

您可以使用装饰器样式功能。对于你想做的事情,这可能有点过头了。

如果您事先不知道hello有多少参数,则必须按照建议适当调用该函数进行反省。