为什么分配给装饰器的参数会给我 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 (将#修改为@)