IndexError:列表索引超出范围|而webapp2

时间:2016-11-25 17:43:58

标签: python html webapp2

我有以下代码。它工作正常,但当players列表的长度变为0时,我的网页变为空白,并且我的终端(服务器)中出现IndexError: list index out of range错误。我希望在self.redirect('/')列表变空时将服务器重定向到players

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 %}

1 个答案:

答案 0 :(得分: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处理程序中编写类似的检查。