2011-07-25 8 views
0

私はそれが混乱を印刷すると呼び出すときに私は次の機能を持っていますが、ifの条件が偽である場合は、それ以外のブランチに行くのではない、私は間違っている?他の場合は、

def lidarMessageHandler(self, mess): 
     print(mess); 
     #Check if I received the right command 
     if(COMMANDTABLE[commandList[self.clientname]['lastcommand']]['id'] == mess['commandName']): 
      print('if') 
      #Check if it's a blocking command    
      commandList[self.clientname]['isready'] = True 
      if(self.start): 
       self.waitingForSettingsHandler(mess) 
       return       
     else: 
      error = "I waited the answer for the following command %s but I received % command from %s " % self.lastCommand, mess['commandName'], self.clientname 
      self.reiseError(error) 
      isRunning[self.clientname] = False 
      print('else'); 
+1

有効です。私が見る奇妙なことは、 'reiseError()'だけです。それは 'raiseError()'ではありませんか? –

+0

あなたの 'else'条件はあなたの内側の' if'とおそらく接続しています。押し込みを確認してください。 –

+0

@Paolo:あなたが正しいと思います。識別は最初に8であり、内側のレベルでは4になります。 –

答えて

3

あなたは、おそらくここに例外を取得:

error = "I waited the answer for the following command %s but I received % command from %s " % self.lastCommand, mess['commandName'], self.clientname 
                     ^

あなたはsを追加する必要があります

error = "I waited the answer for the following command %s but I received %s command from %s " % self.lastCommand, mess['commandName'], self.clientname 
                     ^

(私はmess['commandName']が文字列であると仮定)

+0

はい、それは文字列ですが、プログラムがelseブランチには入っていないので、このエラーは発生しません。 –

+0

ちょうどそれを明らかにするために、あなたはそれをデバッグして、それが 'else'ブランチに向かないか、またはあなたが唯一想定していることを確認してください。 – MByD

1

はそれがif支店に行くことでしたが、あなたのprintだけバッファからフラッシュ取得されていませんか?

また、self.reiseError(error)は私に間違いのように見えるので、AttributeErrorが必要です。

スタックオーバーフローへのペースト後に表示されないインデントエラーも可能です。

2

ときの条件あなたのifステートメント評価さでFalseには、elseブロックが最も確実に実行されます。何が違うと思いますか?

あなたのコードでは、外部のtry - exceptブロックで無視または無音と思われる例外が発生すると思われます。たとえば、近くに「私は%コマンドを受信した」あなたは3つの引数を渡しているので、ライン

error = "I waited the answer for the following command %s but I received % command from %s " % self.lastCommand, mess['commandName'], self.clientname 

は、TypeErrorが発生しますが、あなたは「s」を忘れてしまったように見えるようにのみ、2つのプレースホルダを持っています。

2

"self.reiseError"が実際にエラーを発生させた場合は、isRunning[self.clientname] = Falseになることはありません。

ちなみに、ifでは、かっこをC-構文由来の言語のように使用する必要はありません。