'NoneType' 对象不可调用 - python 装饰器
'NoneType' object is not callable - python decorators
我正在尝试了解 Python 装饰器。
从 FluentPython 一书中尝试了这个例子。 (例7.2,供参考(
# Using Decorators
registry = []
def register(func):
print(f'running registry -> {func}')
registry.append(func)
@register
def f1():
print('running f1()')
@register
def f2():
print('running f2()')
@register
def f3():
print('running f3()')
def main():
print('running registry')
print(f'registry -> {registry}')
f1()
f2()
f3()
if __name__ == '__main__':
print('running main()')
main()
但是当我 运行 这个脚本时它给我错误
> 追溯(最后一次通话):
文件“C:/Users/abcdef/Documents/FluentPython/NLP_C1_W1_lecture_nb_01.py”,第 3 行,位于
Examples.main()
主文件“C:\Users\abcdef\Documents\FluentPython\Examples.py”,第 25 行
f1()
类型错误:'NoneType' 对象不可调用
无法理解为什么会这样。
我只是使用 f1()、f2() 和 f3() 调用函数 - f1、f2 和 f3。我希望打印出 'running f1()' 等,但我得到了一个错误。
谁能详细说明为什么会这样。谢谢
register
注解是对函数的包装,和做
基本一样
register(f1)
并且由于 register
没有 return
声明它 returns None
,所以 f1()
实际上是尝试调用 None
作为函数。
在register
中加上return func
即可解决
def register(func):
print(f'running registry -> {func}')
registry.append(func)
return func
我正在尝试了解 Python 装饰器。 从 FluentPython 一书中尝试了这个例子。 (例7.2,供参考(
# Using Decorators
registry = []
def register(func):
print(f'running registry -> {func}')
registry.append(func)
@register
def f1():
print('running f1()')
@register
def f2():
print('running f2()')
@register
def f3():
print('running f3()')
def main():
print('running registry')
print(f'registry -> {registry}')
f1()
f2()
f3()
if __name__ == '__main__':
print('running main()')
main()
但是当我 运行 这个脚本时它给我错误 > 追溯(最后一次通话): 文件“C:/Users/abcdef/Documents/FluentPython/NLP_C1_W1_lecture_nb_01.py”,第 3 行,位于 Examples.main() 主文件“C:\Users\abcdef\Documents\FluentPython\Examples.py”,第 25 行 f1() 类型错误:'NoneType' 对象不可调用
无法理解为什么会这样。 我只是使用 f1()、f2() 和 f3() 调用函数 - f1、f2 和 f3。我希望打印出 'running f1()' 等,但我得到了一个错误。
谁能详细说明为什么会这样。谢谢
register
注解是对函数的包装,和做
register(f1)
并且由于 register
没有 return
声明它 returns None
,所以 f1()
实际上是尝试调用 None
作为函数。
在register
return func
即可解决
def register(func):
print(f'running registry -> {func}')
registry.append(func)
return func