我正在尝试执行以下操作,但遇到异常 NameError("全局名称' rid'未定义"
def safe_forcecall(fn):
def _safe_forcecall(self, *args, **kwargs):
if self._token_valid(rid) is not None:
return fn(self, *args, **kwargs)
return _safe_forcecall
@safe_forcecall
def add_booking(self, rid, data):
...
答案 0 :(得分:4)
您正在传递rid
作为位置参数,因此可以在args
中找到:
if self._token_valid(args[0]) is not None:
如果您的装饰者总是需要访问该参数,只需明确命名:
def safe_forcecall(fn):
def _safe_forcecall(self, rid, *args, **kwargs):
if self._token_valid(rid) is not None:
return fn(self, rid, *args, **kwargs)
return _safe_forcecall
您在kwargs
字典中找不到该值;只有当您使用add_booking
参数调用rid=rid
时,它才会放在那里。通过在装饰器包装函数中使用显式rid
参数,可以确保它始终绑定到rid
名称。