UnboundLocalError:带默认参数的装饰器
这是我的装饰器代码。我遇到了一个叫做UnboundLocalError的错误,但我不知道为什么会出现这个错误。
>>> def validate(schema=None):
def wrap(f):
def _f(*args, **kwargs):
if not schema:
schema = f.__name__
print schema
return f()
return _f
return wrap
>>> @validate()
def some_function():
print 'some function'
>>> some_function()
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
some_function()
File "<pyshell#22>", line 4, in _f
if not schema:
UnboundLocalError: local variable 'schema' referenced before assignment
>>>
所以,我想在这里发帖问问,也许我漏掉了什么。
谢谢大家。
1 个回答
11
编译器无法确定 schema
的正确作用范围。你可以在 _f()
函数内使用 nonlocal schema
(适用于3.x版本),或者稍微修改一下 _f()
函数的定义:
def _f(self, schema=schema, *args, **kwargs):