UnboundLocalError: local variable 'set_key' referenced before assignment
邪门,本人写了一个缓存的装饰类,为了方便使用,实现的是可以当做类装饰器使用,可以实例化类之后,使用这个实例的一个方法做装饰器,还可以直接把这个实例当做一个缓存直接在代码种get,set.但是发现一个问题,就是这个set_key参数,本来是一个可选参数,如果设置了这个参数,就用这个参数当做缓存的key,如果没有设置,就自己合成一个key,代码如下:
def decorate(self, set_key=None, *set_args, **set_kwargs):
def wrap(func):
def wrapped_func(*func_args, **func_kwargs):
if set_key is None:
set_key = CacheDecorator.make_key(self.domain, func.__name__, *func_args, **func_kwargs)
value = self.cache.get(set_key)
if value is None:
value = func(*func_args, **func_kwargs)
self.cache.set(set_key, value, *set_args, **set_kwargs)
return value
return wrapped_func
return wrap
就是简单的
if set_key is None:
这一样,竟然提示错误:
set_key = set_key
UnboundLocalError: local variable 'set_key' referenced before assignment
如果说这行错误的话,那
value = func(*func_args, **func_kwargs)
self.cache.set(set_key, value, *set_args, **set_kwargs)
这两行也使用了形参,怎么就没提示出错呢? 操它,稍微改了一下:
def decorate(self, set_key=None, *set_args, **set_kwargs):
def wrap(func):
def wrapped_func(*func_args, **func_kwargs):
if set_key is None:
key = CacheDecorator.make_key(self.domain, func.__name__, *func_args, **func_kwargs)
else:
key = set_key
value = self.cache.get(key)
if value is None:
value = func(*func_args, **func_kwargs)
self.cache.set(key, value, *set_args, **set_kwargs)
return value
return wrapped_func
return wrap
就是
if set_key is None:
key = CacheDecorator.make_key(self.domain, func.__name__, *func_args, **func_kwargs)
else:
key = set_key
重新添加了另一个变量,来接收set_key的值,竟然就不出错了,这什么意思?
页:
[1]