解决TypeError: 'NoneType' object is not callable
程序员文章站
2022-03-10 16:17:25
...
今天跑代码发现报错:
TypeError: ‘NoneType’ object is not callable
翻译:“NoneType” 对象不可调用
分析解决:
callable(可调用)对象是指一个后面可以加 ‘( ) ’的对象
既然报错是 ‘不可调用’,那就去掉调用函数的 ‘( )’ 即可。
代码示例:
看代码 #后面的注释就懂了
# 装饰器 <== 高阶函数 + 嵌套函数
def decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
timer = end_time - start_time
print("run time spend :", timer, 's', sep='')
return wrapper() # 这里的'()'会导致报错'NoneType' object is not callable
# 只要去掉wrapper后面的括号即可解决问题
@decorator # 引用装饰器,等同于 run_func = decorator(run_func)
def run_func():
a = int(input("input x:").strip(' '))
b = int(input("input y:").strip(' '))
print("%d**%d = %d" % (a, b, a**b))
run_func() # 装饰器不改变被装饰函数的源代码和调用方式
# 有人说去掉run_func后面的‘()’也可以解决问题,但我觉得不可取,原因看下面
网上有人说去掉被装饰函数(原函数)后面的 ‘( )’ ,虽然也可以让程序不报错,我却觉得这违背了装饰器的意义:装饰器在不改变被装饰函数的源代码和调用方式的情况下增加新的功能,如果去掉原函数的括号那不就是改变调用方式了吗,所以不可取。
推荐阅读
-
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#
-
TypeError: POST data should be bytes, an iterable of bytes, or a file object.制作有道翻译小翻译软件的问题解决方法
-
解决报错:TypeError: argument should be integer or bytes-like object, not ‘str‘
-
TypeError: the JSON object must be str, bytes or bytearray, not NoneType
-
小白入门常见错误python:TypeError: ‘generator‘ object is not subscriptable 的解决方法(萌新踩雷!!!)
-
解决TypeError: 'AnonymousUser' object is not iterable
-
解决Keras报错AttributeError: 'NoneType' object has no attribute 'inbound_nodes'
-
AttributeError: ‘NoneType‘ object has no attribute ‘origin‘解决办法
-
python 3.6.2 TypeError: 'range' object doesn't support item deletion问题解决
-
解决Flask错误“TypeError: 'bool' object is not callable”