2017-03-14 4 views
0

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.

+0

Die letzten drei Zeilen im ersten Codeblock sollten um eine Ebene abgelenkt werden. – SuperSaiyan

+0

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

+0

@jonrsharpe Danke für das Hinweis ... aber das ist nur Beispielcode, den ich versuchte. – Rahul

Antwort

3

Sie haben einen Einrückungsfehler in Ihrem Dekorateur. Die letzten drei Zeilen der __call__-Methode sollten sich in der gleichen Einrückung befinden wie die Zeile def loggedFunc.

+0

Danke @Daniel ... es war wirklich dummer Fehler. – Rahul

Verwandte Themen