修饰方法中赋值前引用的局部变量

2024-03-28 18:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个可以让我做如下事情的装饰工:

@cooldownf(lambda self, **eargs: 30 - self.level)
def method(self, **eargs):
    ...

这将简单地装饰方法,使它有一个冷却时间。 这一切都很好,现在可以每隔30 - self.level秒执行该方法。在

但是,我想添加一条消息,如果该方法仍处于冷却状态,则会显示该消息。 我为cooldownf装饰器添加了一个message参数,但随后我在装饰器代码中的ìf message:行中得到了一个错误UnboundLocalError: local variable 'message' referenced before assignment

^{pr2}$

是什么引起的? 我可以在cooldownfmethod_decorator内部打印message,但将打印添加到method_wrapper中会导致错误。 这正是代码,我不能用函数在IDLE中复制它,这与我使用方法有关吗?在


Tags: 方法lambda代码self消息messagedef错误
1条回答
网友
1楼 · 发布于 2024-03-28 18:59:33

您正在将分配给最里面函数中的method

message = message.format(
    name=self.name,
    cd=method_wrapper.cooldown.remaining,
    max_cd=method_wrapper.cooldown.limit
)

{cd2>没有赋值就不能赋值。你不能和当地人做那样的事。在

因为您不想修改closed over参数,所以需要在这里使用一个新的本地名称:

^{pr2}$

相关问题 更多 >