Lors du débogage, j'aime imprimer toutes les entrées et les sorties d'une fonction (je sais que j'ai besoin d'un meilleur IDE, mais humour moi, cela pourrait être utilisé pour signaler des erreurs). Donc, je voudrais idéalement avoir:Comment écririez-vous un décorateur @debuggable en python?
@debuggable
def myfunc(argA,argB,argC):
return argB+1
et d'utiliser une variable globale pour activer ou désactiver le débogage. Non, vous n'aimez pas les globals non plus, je l'ai deviné.
Le meilleur que je peux trouver est:
DEBUG = True
def debuggable(func):
if DEBUG:
def decorated(*args):
print "Entering ",func.func_name
print " args ",args
ret = func(*args)
print ret
return ret
return decorated
else:
return func
@debuggable
def myfunc(this,that):
return this+that
et le fonctionnement:
>>> myfunc(1,3)
Entering myfunc
args (1, 3)
4
Comment puis-je améliorer cela?
Il y a un billet de blog assez long sur le sujet de tracer des décorateurs à [Word Aligned] (http://wordaligned.org/articles/echo). –