何かの戦略が発生したときに、引数を受け取る単純なデコレータを作成しました(クラスの代わりに関数を使用)。行を追加すると、前の行の実行が中断されます。
コードは次のとおりです。
def my_decorator(sublabel):
def duration_wrapper(f):
print sublabel
# Uncommenting this code will break the previous line - why?
# if sublabel is None:
# sublabel = f.func_name
def wrapped_function(*args, **kwargs):
return f(*args, **kwargs)
return wrapped_function
return duration_wrapper
@my_decorator('me')
def myf(): pass
myf()
これらのコード行のコメントを解除すると、次の例外が発生します。
Traceback (most recent call last):
File "test.py", line 16, in <module>
@my_decorator('me')
File "test.py", line 4, in duration_wrapper
print sublabel
UnboundLocalError: local variable 'sublabel' referenced before assignment
これらの2行のコードのコメントを外すと壊れてしまう理由を誰かが説明できますか?