对于这个功能
def eat_dog(name, should_digest=True):
print "ate dog named %s. Digested, too? %" % (name, str(should_digest))
我想在函数外部读取它的参数和附加的任何默认值。所以对于这个特定的例子,我想知道它name
没有默认值(即它是一个必需的参数),这True
是should_digest
.
我知道inspect.getargspec()
,它确实为我提供了有关参数和默认值的信息,但我认为两者之间没有任何联系:
ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))
从这个输出我怎么知道True
(在defaults
元组中)是默认值should_digest
?
此外,我知道解决问题的“请求宽恕”模型,但不幸的是,该错误的输出不会告诉我缺少的参数的名称:
>>> eat_dog()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: eat_dog() takes at least 1 argument (0 given)
为了提供上下文(我为什么要这样做),我通过 JSON API 公开模块中的函数。如果调用者省略了某些函数参数,我想返回一个特定的错误来命名被省略的特定函数参数。如果客户端省略了参数,但函数签名中提供了默认值,我想使用该默认值。