Единственное, что не упомянуто, это проблемы с областями видимости. Не очень хороший пример, но вот случай, когда я столкнулся с проблемой:
def conf_decorator(dec):
"""Enables behavior like this:
@threaded
def f(): ...
or
@threaded(thread=KThread)
def f(): ...
(assuming threaded is wrapped with this function.)
Sends any accumulated kwargs to threaded.
"""
c_kwargs = {}
@wraps(dec)
def wrapped(f=None, **kwargs):
if f:
r = dec(f, **c_kwargs)
c_kwargs = {}
return r
else:
c_kwargs.update(kwargs) #<- UnboundLocalError: local variable 'c_kwargs' referenced before assignment
return wrapped
return wrapped
Решение состоит в том, чтобы заменить c_kwargs = {}
на c_kwargs.clear()
Если кто-то придумает более практичный пример, не стесняйтесь редактировать этот пост.