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

2024-04-26 08:02:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

    except ValueError:
        print ("Try again")

我在这段代码中遇到的问题是,每当except行被触发时,我的循环就不会完全重置自己。发生的情况是,当我得到一个异常时,异常本身在范围内计为1。。你知道吗

更具体地说:

假设用户没有触发异常,我们得到这5个年龄输入5 4 5 3 2(范围5),但是如果我们触发了异常,那么用户只允许输入4个年龄5 4 5 3,因为出于某种原因,异常计入范围计数。有人知道如何解决这个问题吗?你知道吗


Tags: of代码用户in示例forinputage
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")

for循环中保持while循环,直到获得所需的输入。你知道吗

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")

这样,只有在获得有效的catage值时,才能进入外for循环的下一次迭代。你知道吗

也许。。。你知道吗

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

        except ValueError:
            print ("Try again")

相关问题 更多 >