J'essaie d'utiliser un décorateur pour imprimer mes journaux. Et pour ce faire, je l'ai défini décorateur dans un fichier nommé custom_logger.py:Impossible d'utiliser le décorateur défini dans un autre fichier en python
import logging
class Logger(object):
def __init__(self,decoratee_enclosing_class):
self.decoratee_enclosing_class = decoratee_enclosing_class
def __call__(self, aFunc):
"""Trace entry, exit and exceptions."""
def loggedFunc(*args, **kw):
print "enter", aFunc.__name__
try:
result= aFunc(*args, **kw)
except Exception, e:
print "exception", aFunc.__name__, e
raise
print "exit", aFunc.__name__
return result
loggedFunc.__name__= aFunc.__name__
loggedFunc.__doc__= aFunc.__doc__
return loggedFunc
Et voici mon code de test d'échantillon:
from custom_logger import Logger
class Test(object):
@Logger('Test')
def testP(self):
print "hello"
a = Test()
a.testP()
J'obtiens l'erreur suivante: retraçage (le plus récent dernier appel): fichier "test.py", ligne 13, à a.testP() TypeError: objet 'NoneType' est pas appelable
Ainsi peut-on signaler ce que je manque? J'ai suivi ce lien pour reference.
Les trois dernières lignes du premier bloc de code doivent être dépassées d'un niveau. – SuperSaiyan
Quel est le but de 'decoratee_enclosing_class'? Pourquoi prendre le nom de classe comme argument à un décorateur de méthode? Aussi, excepté Exception, e: 'est à ce stade une syntaxe très ancienne qui ne fonctionnera pas sur Python 3.x. – jonrsharpe
@jonrsharpe Merci de m'avoir signalé ... mais c'est juste un exemple de code que j'essayais. – Rahul