私のログを印刷するためにデコレータを使用しようとしています。そして、これを行うには、私は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のこのリンクに従っています。
最初のコードブロックの最後の3行は、1つのレベルでアウトデントされる必要があります。 – SuperSaiyan
'decoratee_enclosing_class'のポイントは何ですか?メソッドデコレータの引数としてクラス名を使用するのはなぜですか?また 'except Exception、e:'はこの時点ではPython 3.xでは動作しない非常に古い構文です。 – jonrsharpe
@jonrsharpe指摘してくれてありがとう...しかし、これは私が試していたサンプルコードです。 – Rahul