UnboundLocalError:带默认参数的装饰器

6 投票
1 回答
1360 浏览
提问于 2025-04-16 15:32

这是我的装饰器代码。我遇到了一个叫做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):

撰写回答