Obtener el valor predeterminado de un argumento de función?

Para esta funcion

def eat_dog(name, should_digest=True):
    print "ate dog named %s. Digested, too? %" % (name, str(should_digest))

Quiero, externo a la función, leer sus argumentos y los valores predeterminados adjuntos. Así que para este ejemplo específico, quiero saber quename no tiene un valor predeterminado (es decir, que es un argumento obligatorio) y queTrue es el valor predeterminado parashould_digest.

Soy consciente deinspect.getargspec(), lo que me da información sobre argumentos y valores predeterminados, pero no veo ninguna conexión entre los dos:

ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))

De esta salida, ¿cómo puedo decir queTrue (en eldefaults tupla) es el valor predeterminado parashould_digest?

Además, soy consciente del modelo de "pedir perdón" para abordar un problema, pero desafortunadamente, el resultado de ese error no me dirá el nombre del argumento faltante:

>>> eat_dog()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: eat_dog() takes at least 1 argument (0 given)

Para dar contexto (por qué quiero hacer esto), estoy exponiendo funciones en un módulo a través de una API JSON. Si la persona que llama omite ciertos argumentos de función, quiero devolver un error específico que nombre el argumento de función específica que se omitió. Si un cliente omite un argumento, pero hay un valor predeterminado provisto en la firma de la función, quiero usar ese valor predeterminado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta