2017-03-14 10 views
0

私のログを印刷するためにデコレータを使用しようとしています。そして、これを行うには、私は1つのファイルの名前custom_logger.pyでデコレータを定義している: トレースバック(最新:私は次のようなエラーになっていますpythonの他のファイルで定義されたデコレータを使用できません

from custom_logger import Logger 

class Test(object): 
    @Logger('Test') 
    def testP(self): 
     print "hello" 
a = Test() 
a.testP() 

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 

そして、ここでは私のサンプルテストコードです a.testP() TypeError例外で、 ファイル "test.py"、13行目:最後)を呼び出す 'NoneType' オブジェクトはありません呼び出し可能です

ので、いずれかが、私が行方不明です何を指摘することができますか?

私はreferenceのこのリンクに従っています。

+0

最初のコードブロックの最後の3行は、1つのレベルでアウトデントされる必要があります。 – SuperSaiyan

+0

'decoratee_enclosing_class'のポイントは何ですか?メソッドデコレータの引数としてクラス名を使用するのはなぜですか?また 'except Exception、e:'はこの時点ではPython 3.xでは動作しない非常に古い構文です。 – jonrsharpe

+0

@jonrsharpe指摘してくれてありがとう...しかし、これは私が試していたサンプルコードです。 – Rahul

答えて

3

デコレータにインデントエラーがあります。 __call__メソッドの最後の3行は、def loggedFunc行と同じ字下げにする必要があります。

+0

ありがとう@ダニエル...それは本当にばかげた過ちだった。 – Rahul

関連する問題