2010-07-19 46 views
4

我有一个如下所示的函数,带有大量的可选参数。其中一个参数,在所有其他参数中有一个是textPython“NoneType不可调用”错误

我处理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命令行上进行实验似乎证实了我的工作方式。

+5

你有一个叫'type'的参数吗? – SilentGhost 2010-07-19 17:34:38

+0

@SilentGhost,应该是个答案。 – 2010-07-19 17:37:14

+0

@Matthew:如你所愿:) – SilentGhost 2010-07-19 17:38:37

回答

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 
+0

谢谢,就是这样。我感到非常愚蠢。 – 2010-07-19 17:39:42

0

我敢打赌,你有你的论点之间的type=None

的一般规则的一种特殊情况:“不要隐藏你自己的内置标识符 - 它可能会或可能不会在任何特定的情况下,给予咬,但它咬你nastily在某些情况下,在未来,除非你养成了正确的习惯“ - )

相关问题