[pyar] Detectando llamadas con cantidad incorrectas de argumentos

Daniel Moisset dmoisset en machinalis.com
Vie Feb 27 17:52:53 ART 2015


Hola, estoy tratando de resolver el siguiente problema:

tengo un cacho de código que saca de varios lados un callable 'f', una
lista 'args', y un diccionario 'kwargs'

Ese cacho de codigo llama a f(*args, **kwargs)

Cuando eso sucede, existe la posibilidad de que las cantidades de
argumentos no coincidan, por ejemplo que f acepte 2 argumentos, y args sea
una lista de 100 valores. Eso me va a levantar una excepción del estilo

TypeError: f() takes exactly 2 arguments (100 given)

Quiero capturar ese error para poder generar mensajes de log/error
relevantes (que dicen por ejemplo de donde salieron f, args, kwargs a un
nivel mas relevante para el que lee logs). Lo primero que se me ocurrio es:

try:
    f(*args, **kwargs)
except TypeError:
    loguear(informacion_relevante)

El problema es que esto me captura otros TypeErrors que no tienen nada que
ver con llamar a la funcion con cantidad correcta de argumentos, que se
capturan a un nivel mas alto, y quiero dejar pasar. Entonces quisiera hacer:

try:
    f(*args, **kwargs)
except TypeError as e:
    if <e es por un mismatch de argumentos>:
        loguear(informacion_relevante)
    else: raise

o alguna alternativa como:

if <f, args, kwargs no matchean en argumentos>:
    loguear(informacion_relevante)
else:
    f(*args, **kwargs)

Se les ocurre alguna forma de lograr eso?

Saludos,
    D.

-- 
Daniel F. Moisset - Technical Leader
www.machinalis.com
Skype: @dmoisset
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150227/c02d9ccf/attachment.html>


More information about the pyar mailing list