2016-11-25 10 views
0

私は次のコードを持っています。正常に動作しますが、playersのリストの長さが0になると、私のWebページは空白になり、このIndexError: list index out of rangeエラーが端末(サーバー)に表示されます。 playersのリストが空になると、サーバーをself.redirect('/')にリダイレクトする方法が必要です。IndexError:リストインデックスが範囲外です。 webapp2

def choose_random_player(list): 
    return random.choice(list) 


class GuessPlayer(Handler): 
    players = ['sanchez', 'welbeck', 'giroud', 'ozil', 'ramsey'] 
    random_player = choose_random_player(players) 
    score = 0 

    def get(self): 
     self.render("guessplayer.html", 
        random_player=GuessPlayer.random_player, 
        score=GuessPlayer.score) 

    def post(self): 
     user_answer = self.request.get("player-name") 
     if user_answer == GuessPlayer.random_player: 
      GuessPlayer.score += 1 
      GuessPlayer.players.remove(GuessPlayer.random_player) 
      GuessPlayer.random_player = choose_random_player(GuessPlayer.players) 
      self.render("guessplayer.html", 
         random_player=GuessPlayer.random_player, 
         score=GuessPlayer.score) 
     else: 
      self.render("guessplayer.html", 
         random_player=GuessPlayer.random_player, 
         score=GuessPlayer.score) 

HTMLフォーム:

{% extends 'base.html' %} 

{% block content %} 

<div class="row"> 
    <div class="col-md-12 text-center"> 
     <h4>Enter The Player Name</h4> 
     <div class="thumbnail"> 
     <div class="score">Score: {{score}}</div> 
     <img src="../images/{{random_player}}.jpg" alt="..."> 
     <form method="post"> 
      <input type="text" name="player-name"> 
      <br><br> 
      <input type="submit" class="btn btn-primary"> 
     </form> 
     </div> 
    </div> 
</div> 

{% endblock %} 
+0

'choose_random_player'の定義を追加してください。 –

答えて

0

私はplayersが空リストであるとき、choose_random_player(players)IndexErrorを提起することを推測しています。

必要に応じてこの例外をキャッチして、ユーザーを/にリダイレクトすることはできますが、それは少し醜いことです。

def get(self): 
    try: 
     random_player = choose_random_player(players) 
    except IndexError: 
     self.redirect('/') 

    self.render(...) 

よりクリーンなバージョンがplayersがランダムプレイヤーを選択する前に、空のリストであるかどうかを確認することです。

def get(self): 
    if len(players) == 0: 
     self.redirect('/') 

    random_player = choose_random_player(players) 
    self.render(...) 

同様のチェックは、postハンドラにも書き込む必要があります。

+0

はどちらも試しましたが、まだエラーがあります – hadyfarhat

+0

@ h236aはどの行ですか? –

関連する問題