如何处理for循环中的异常?

时间:2014-06-16 01:39:35

标签: python python-2.7 exception for-loop

这是一个随机的python循环代码示例:

for j in range(5):
    try:
        cats = raw_input("Enter age of your five cats")

    except ValueError:
        print ("Try again")

我对这段代码的问题是,当触发除行时,我的循环不能完全重置。会发生什么事情,当我得到一个异常时,异常本身在范围内计为1 ..

更具体:

假设用户没有触发异常,我们得到这5个年龄输入 5 4 5 3 2 (范围5),但是如果我们确实触发了异常,那么用户只能进入4个年龄 5 4 5 3 因为某些原因,异常计入范围计数。有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

for j in range (5):
    badCat = True
    while badCat:
        try:
            cats[j] = int (raw_input ("Enter age of cat # %d: " % (j + 1)))
            badCat = False
        except ValueError:
            print ("Try again")

这将保留在一只猫上,直到你输入一个"适当的"年龄。

您会注意到我在您的输入函数调用周围包裹了int()。我认为这是你最终要做的事情,因为我很确定raw_input()并不会自己抛出ValueError

我还将猫的年龄存储在一个数组中,因为您的代码只会记住输入的最后一个年龄。

你可以通过稍作修改来消除对单独变量的需要(如果你担心那种事情(我倾向于不这样)):

for j in range (5):
    while True:
        try:
            cats[j] = int (raw_input ("Enter age of cat # %d: " % (j + 1)))
            break;
        except ValueError:
            print ("Try again")

答案 1 :(得分:1)

保持while循环内的for循环,直到获得所需的输入。

for j in range(5):
    input_ok = False
    while not input_ok:
        try:
            cats = raw_input("Enter age of your five cats")
            input_ok = True
        except ValueError:
            print ("Try again")

这样,当您获得有效的猫龄时,您将只进入外部for循环的下一次迭代。

答案 2 :(得分:0)

也许......

for j in range(5):
    while True:
        try:
            cats = raw_input("Enter age of your five cats")
            break

        except ValueError:
            print ("Try again")