Для этой функции
Код: Выделить всё
def eat_dog(name, should_digest=True):
print "ate dog named %s. Digested, too? %" % (name, str(should_digest))
Я хочу, чтобы вне функции было прочитано ее аргументы и все прикрепленные значения по умолчанию. Итак, в этом конкретном примере я хочу знать, что name не имеет значения по умолчанию (т. е. является обязательным аргументом) и что True является значением по умолчанию для must_digest.
Мне известен метод Inspect.getargspec(), который предоставляет мне информацию об аргументах и значениях по умолчанию, но я не вижу связи между ними:
Код: Выделить всё
ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))
Из этих выводов как я могу определить, что True (в кортеже defaults) является значением по умолчанию для must_digest?
Кроме того, я знаю о модели подхода к проблеме «попросить прощения», но, к сожалению, выходные данные этой ошибки не сообщают мне имя недостающего аргумента:
Код: Выделить всё
>>> eat_dog()
Traceback (most recent call last):
File "", line 1, in
TypeError: eat_dog() takes at least 1 argument (0 given)
Чтобы дать контекст (почему я хочу это сделать), я представляю функции в модуле через API JSON. Если вызывающая сторона пропускает определенные аргументы функции, я хочу вернуть конкретную ошибку, которая называет конкретный аргумент функции, который был опущен. Если клиент опускает аргумент, но в сигнатуре функции указано значение по умолчанию, я хочу использовать это значение по умолчанию.
Подробнее здесь:
https://stackoverflow.com/questions/126 ... ault-value