Python装饰器运行报'NoneType' object is not callable错误求解
错误原因
Python 装饰器是语法糖,@register 等价于执行 f1 = register(f1)。你定义的 register 函数没有显式设置返回值,默认返回 None,经过装饰后,原 f1、f2、f3 变量都会被覆盖为 None,调用时自然触发 NoneType 不可调用的报错。
修复方案
在 register 装饰器末尾显式返回被装饰的函数对象即可:
def register(func): print(f'running registry -> {func}') registry.append(func) return func
修改后运行代码,会先在模块导入阶段执行三次 register 逻辑将三个函数加入注册列表,调用 f1()、f2()、f3() 时就会正常输出对应内容,和《FluentPython》7.2 节示例效果一致。
内容的提问来源于stack exchange,提问作者S Gunecha
相关产品推荐
相关产品推荐

