2012-09-27 24 views
12

私はPythonの新機能です。エラーが発生しましたTypeError: 'bool'オブジェクトは呼び出し可能ではありません

while not cls.isFilled(row,col,myMap): 
TypeError: 'bool' object is not callable 

この問題の解決方法を教えてください。 最初の「if」チェックは問題ありませんが、「not」にはこのエラーがあります。

def main(cls, args): 
     ... 
     if cls.isFilled(row,col,myMap): 
      numCycles = 0 

     while not cls.isFilled(row,col,myMap): 
      numCycles += 1 


def isFilled(cls,row,col,myMap): 
     cls.isFilled = True 
     ## for-while 
     i = 0 
     while i < row: 
      ## for-while 
      j = 0 
      while j < col: 
       if not myMap[i][j].getIsActive(): 
        cls.isFilled = False 
       j += 1 
      i += 1 
     return cls.isFilled 
+5

Flask-Loginで誰かが似たようなエラーになるならば、 'current_user.is_authenticated():TypeError: 'bool'オブジェクトは呼び出し可能ではない' [この質問を参照](http://stackoverflow.com/q/32750526/1429387) )。 – naXa

答えて

38

あなたはcls.isFilled = Trueです。これはisFilledというメソッドを上書きし、その値をTrueに置き換えます。その方法は今やなくなり、もう呼び出すことはできません。だから、あなたがもう一度それを呼び出そうとすると、それはもう存在しないので、あなたは誤りを得る。

解決方法では、メソッドの変数とは異なる名前を使用します。

0

実際には、次の手順でそれを修正することができます -

  1. cls.__dict__
  2. を行いますこれは、あなたが設定した内容に応じて、{'isFilled':True}または{'isFilled':False}が含まれています辞書形式の出力が得られます。
  3. このエントリを削除します - del cls.__dict__['isFilled']
  4. 今すぐメソッドを呼び出すことができます。

この場合、BrenBarnが述べたようにメソッドをオーバーライドするエントリを削除します。

関連する問題