【发布时间】:2021-10-24 05:37:17
【问题描述】:
我有一个接受另一个函数的高阶函数,我需要确保传递的函数至少接受 2 个参数,并且其中一个参数的名称是 'n'。
所以我写了下面的代码:
import inspect
def higher_order_function(passed_function):
parameters = inspect.signature(passed_function).parameters
if len(parameters) < 2:
raise ValueError("passed_function should accept at least 2 arguments")
if 'n' not in parameters:
raise ValueError("passed_function should accept an argument named 'n'")
我不确定我是否针对这两种情况提出了正确的异常类型。
【问题讨论】:
-
TypeError 可能更合适。
-
def bad_fctn(): n, foo = 1, 2会通过但不接受任何参数。 -
@khelwood 不同意,我认为应该是
ValueError,type 是正确的,它是一个函数对象,但该函数对象的值不合适。 -
@juanpa.arrivillaga - 但是如果您使用错误数量的参数或不存在的关键字进行调用,则会出现 TypeError。好像这是一个类似的案例。
-
要详细说明@tdelaney 点,你不能在这里使用
co_varnames,它只会给你本地名称。如果您想检查签名...使用inspect.signature,例如sig = inspect.signature(passed_func)那你可以看看sig.parameters
标签: python function exception functional-programming higher-order-functions