微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么分配给装饰器的参数会给我 UnboundLocalError?

如何解决为什么分配给装饰器的参数会给我 UnboundLocalError?

这个最少的代码给了我UnboundLocalError: local variable 'info' referenced before assignment

def repeat(_func=None,*,times=3,info=None):
    def wrapper(func):
        def wrapped_func(*args,**kwargs):
            if info is None:
                info = "UnkNown"
            for _ in range(times):
                print("Calling ",info)
                func(*args,**kwargs)
        return wrapped_func

    if _func is None:
        return wrapper
    else:
        return wrapper(func)

@repeat(times=3)
def printA():
    print("A")

if __name__ == "__main__":
    printA()

但是,如果我删除 info = "UnkNown"错误就会消失,以下代码会正确打印三个“Calling None”和三个“A”。

def repeat(_func=None,**kwargs):
            if info is None:
                pass
            for _ in range(times):
                print("Calling ",**kwargs)
        return wrapped_func

    if _func is None:
        return wrapper
    else:
        return wrapper(func)

@repeat(times=3)
def printA():
    print("A")

if __name__ == "__main__":
    printA()

这对我来说似乎很奇怪,因为唯一的区别是我是否赋值给变量info,而不是引用。我也确实在 print 中引用了它,它很好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。