这是我的装饰代码。我出于某种原因得到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
>>>
所以,我想也许最好在这里发帖。我可能会遗漏一些东西。
感谢。
答案 0 :(得分:10)
编译器无法确定schema
的适当范围。在nonlocal schema
中使用_f()
(3.x)或稍微更改_f()
的定义:
def _f(self, schema=schema, *args, **kwargs):