UnboundLocalError:具有默认参数的Decorator

时间:2011-04-12 04:25:32

标签: python decorator

这是我的装饰代码。我出于某种原因得到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 个答案:

答案 0 :(得分:10)

编译器无法确定schema的适当范围。在nonlocal schema中使用_f()(3.x)或稍微更改_f()的定义:

def _f(self, schema=schema, *args, **kwargs):