Ich versuche, einen Dekorator zum Drucken meiner Protokolle zu verwenden. Und um dies zu tun, ich habe definiert Dekorateur in einer Datei mit dem Namen custom_logger.py:Der in einer anderen Datei in Python definierte Dekorator konnte nicht verwendet werden.
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
Und hier ist meine Probe Testcode:
from custom_logger import Logger
class Test(object):
@Logger('Test')
def testP(self):
print "hello"
a = Test()
a.testP()
Ich erhalte folgende Fehlermeldung: Traceback (jüngste rufen Sie zuletzt): File "test.py", Zeile 13, in a.testP() Typeerror: 'NoneType' Objekt ist nicht aufrufbar
kann also jemand darauf hinweisen, was bin ich dabei?
Ich habe diesen Link für reference verfolgt.
Die letzten drei Zeilen im ersten Codeblock sollten um eine Ebene abgelenkt werden. – SuperSaiyan
Was ist der Sinn von 'decoratree_enclosing_class'? Warum sollte der Klassenname als Argument für einen Methoden-Dekorator verwendet werden? Auch 'except Exception, e:' ist zu diesem Zeitpunkt eine sehr altmodische Syntax, die auf Python 3.x nicht funktioniert. – jonrsharpe
@jonrsharpe Danke für das Hinweis ... aber das ist nur Beispielcode, den ich versuchte. – Rahul