我有一个看起来如下的函数,有很多可选参数。其中一个参数是text
。
我特意处理text
因为如果它是一个布尔值,那么我想跑去做一些基于它的事情。如果不是(这意味着它只是一个字符串),那么我会做其他事情。代码看起来大致如下:
def foo(self, arg1=None, arg2=None, arg3=None, ..., text=None, argN=None, ...):
...
if text is not None:
if type(text)==bool:
if text:
# Do something
else:
# Do something else
else:
# Do something else
我在type(text)==bool
行上收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...", line 79, in foo
if type(text)==bool:
TypeError: 'NoneType' object is not callable
不确定问题是什么。我应该以不同的方式测试类型吗?在python命令行上进行试验似乎证实了我的做法应该有效。
答案 0 :(得分:8)
我猜你在某处有一个名为type
的参数,我可以使用以下代码轻松重现您的错误:
>>> type('abc')
<class 'str'>
>>> type = None
>>> type('abc')
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
type('abc')
TypeError: 'NoneType' object is not callable
答案 1 :(得分:0)
我打赌你的论点中有type=None
。
一般规则的一个特例:“不要隐藏自己的内置标识符 - 它可能会或可能不会在任何特定的情况下咬人,但它会咬你在某些情况下,除非你养成正确的习惯“! - )