Для этой функции
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)
Чтобы дать контекст (почему я хочу это сделать), я подвергаю функции в модуле над API JSON. Если вызывающий абонент пропускает определенные аргументы функции, я хочу вернуть определенную ошибку, которая называет аргумент конкретной функции, который был опущен. Если клиент опускает аргумент, но там есть значение по умолчанию, указанное в сигнатуре функции, я хочу использовать это значение по умолчанию.