【发布时间】:2011-07-03 01:51:49
【问题描述】:
这个简单的装饰器按预期工作:
def protect(*permissions):
def outer(f):
def inner(*args):
print permissions[0]
return f(*args)
return inner
return outer
@protect('protected')
def func(var):
return var
print func('something')
输出是:
protected
something
超越 Python shell 并在我的项目的更大范围内使用装饰器,发生了一些奇怪的事情:在 inner 函数内部,permissions 没有定义。
我想一定有一些 Python 变量范围/装饰器的细微之处我不知道这可能会导致这种情况。任何见解都值得赞赏。
【问题讨论】:
-
好吧,我们需要不起作用的代码;)它的输出(或者确切地说,确切的错误消息)也会有所帮助。
-
当我试图访问权限的值时,这是一个 NameError。我现在正在挠头,b/c 一切正常。一定是装饰师之外的问题。抱歉问了一个不好的问题。