2017-02-15 20 views
-1

メソッド内でif、elif、else文を使用しています。コードを実行すると、if、elif、またはelseは実行されませんが、elif文をコメントアウトすると、デフォルトでelseが期待通りにデフォルト設定されます。if、elif、else if、elif、else文は実行されません

def message(response): 
     args.pop(0) 
     if com_text == "trivia": 
      # triviaActive will be False 
      if triviaActive: 
       # Performs action 
       return True 
      # args[0].lower() is not equal to 'start' 
      elif args[0].lower() == "start" and not triviaActive: 
       # Performs action 
       return True 
      # So it should defaults to this else 
      else: 
       # Performs action 
       return True 

予期せぬ結果をもたらすif、elif、elseステートメントのチェーンの上にいくつかのコメントを追加しました。このような状況では、elseステートメントをデフォルトにする代わりに、メソッドの残りの部分を実行しないでメソッドから戻ります。 if、elif、else文の中でprintステートメントを使ってみしようとしましたが、プログラムはそれらを実行しません。

(編集) 私はif、elifなどを簡略化しました。この単純化されたバージョンでも、私はまだ私のelifに問題があります。また、popメソッドを使用してargsの値をポップし、それを問題にする可能性のある空にしていることを言及したいと思います。

+0

インデントを確認しましたか?最後の 'elif'と' else'は必要以上に1つのタブでインデントされているようです。 –

+0

@GeorgeBouインデントをチェックしても問題ありません。 pycharmを使用するので、シンタックスやインデントの問題のようには見えません。 – Mac18

+3

インデント用にスペースとタブを混ぜていることもあります。 Python 2はタブを8つのスペースに相当するものとして解釈します。これは、エディタで異なるスペースが表示されていると非常に混乱する可能性があります(例:4スペースに相当)。 Python 3では、コードの同じ部分にタブとスペースを混在させることはできませんので、コードを修正してどちらか一方のみを使用するようにしてください(おそらく、 。 – Blckknght

答えて

0

テストそれが成立しない場合に実行されますあなたの条件の

True: 

なしで

com_text == "trivia": 

を置き換えることにより、コード。

この変更の後にすべてがうまくいくように見える場合は、エディターが空白行の間隔を気に入らない可能性があります。サニティチェックとして、空白行を削除し、期待どおりに動作するかどうかを確認します(空白行に適切なインデントがなく、空白行にインデントがないように見えるエディタもあります)。

+0

テストしても同じ結果が得られました。私はそれが私の "args [0]"と関係があると信じています。私はそれを実際の文字列に置き換えると、それは機能しました。なぜ今なぜかを考えようとしています。 – Mac18

+0

更新を参照..... –

関連する問題