缺少用户用户输入时,Python索引超出范围

时间:2016-09-29 22:01:38

标签: python indexoutofrangeexception

我知道这是一个简单的修复 - 但我不能为我的生活弄清楚如何解决这个IndexError。

def show_status():
    print("\nThis is the " + rooms[current_room]["name"])



rooms = { 

        1 : { "name" : "Highway" ,
              "west" : 2 ,
              "east" : 2 ,
              "north": 2 ,
              "south": 2} ,
        2 : { "name" : "Forest" ,
              "west" : 1 ,
              "east" : 1 , 
              "north": 1 ,
              "south": 1} , 
        }

current_room = 1

while True:

    show_status()

    move = input(">> ").lower().split()


    if move[0] == "go":
        if move[1] in rooms[current_room]:
            current_room = rooms[current_room][move[1]]
        else:
             print("you can't go that way!")
    else:
        print("You didn't type anything!")

如果用户在没有输入值的情况下按下“返回”,则游戏会因“列表索引超出范围”而崩溃。我不明白为什么“else”没有在while循环中捕获它。

1 个答案:

答案 0 :(得分:1)

move[0]检查列表的第一个成员,如果IndexError为空,则会抛出move,就像用户只需按Enter一样。您可以先检查move是否为真:如果不是,and运算符将绕过下一次检查。

您似乎期望用户输入一个空格,导致两个成员。您应该检查len(move) == 2以确保这一点。

修改如下:

# ...
move = input(">> ").lower().split()

if len(move) == 2 and move[0] == "go":
   # the rest