我有以下装饰: 缺少参数
from decorator import decorator
def my_decorator(key=None, timeout=None, retry=0):
"""
My decorator
"""
import pdb; pdb.set_trace()
def _my_decorator(func):
import pdb; pdb.set_trace()
key = key or func.__name__
@decorator
def __my_decorator(f, *args, **kwargs):
result = "abc"
return result
return __my_decorator(func)
return _my_decorator
在第一PDB部分,的locals()
结果是:
>>> locals()
{'key': None, 'retry': 0, 'pdb': <module 'pdb' from '/opt/python/2.7/lib/python2.7/pdb.pyc'>, 'timeout': None}
在第二PDB部,结果locals()
是:
>>> locals()
{'timeout': None, 'retry': 0, 'pdb': <module 'pdb' from '/opt/python/2.7/lib/python2.7/pdb.pyc'>, 'func': <function get_items at 0x9e172cc>}
异常无PDB:
key = key or func.__name__
UnboundLocalError: local variable 'key' referenced before assignment
你有什么想法,为什么key
说法走了嵌套函数_my_decorator?这更奇怪,因为timeout
和retry
参数仍然可以访问(尽管这是嵌套函数中的正常行为)。
有一种变通方法:
def my_decorator(key=None, timeout=None, retry=0):
"""
My decorator
"""
key2 = key
def _my_decorator(func):
key = key2 or func.__name__
...
,但它不是一个解决方案(参数key
还在不在了在_my_decorator
,但key2
现在访问)
Python版本:2.7.3
你如何使用'key'在装饰者? – ecatmur