即使输入为0,为什么while循环执行try套件? 我认为根据文档,中断应该是即时的吗?
level = 1
while level != 0:
level = int(input("Enter level (1, 2, 3)\n")) % 4
try:
g = ply.level_high(level)
print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
except:
print("Invalid level")
答案 0 :(得分:2)
while循环开始后,您将收到输入。因此,即使输入为0,循环的其余部分也将执行。
答案 1 :(得分:1)
在每次迭代开始时检查while循环的条件。因此,发生的情况是该级别仅在之后被检查为0,并且不会立即退出。 事件的顺序:
level is set to 1
while loop entered
start of first iteration: exit if level is not 0
set level to (0 in this case)
do your try-except
您可以看到,检查while
条件时,级别不为0,因此仍然执行第一次迭代。
解决此问题的好方法显示在https://wiki.python.org/moin/WhileLoop。
在这种情况下,您可以
level = 1
while True: #exiting of the loop is handled with the break
level = int(input("Enter level (1, 2, 3)\n")) % 4
if level==0: #the loop condition is inverted and moved here
break
try:
g = ply.level_high(level)
print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
except:
print("Invalid level")
答案 2 :(得分:1)
如果仅在用户未输入0时才执行try块,则在while循环之外需要try块:
级别= 1
git pull
尽管裸身除外不是一个好习惯-您确实需要能够准确地确定您感兴趣的异常。
答案 3 :(得分:0)
排序!!!谢谢你们!很大的帮助。
level = 1
while True:
try:
level = int(input("Enter level (1, 2, 3)\n"))
if level == 0:
break
g = ply.level_high(level)
print("Player with highest level", level, "score is", g[0][0], "with", g[0][level])
except ValueError:
print("Invalid value")
except IndexError:
print("Invalid level")