在 while 循环中尝试块

Try block inside while loop

我需要得到精确的 4 个带分隔符的整数输入并对其执行以下操作:

((num1*num2)+num3)/num4

因此,我这里有两个错误要处理。 ValueErrorZeroDivisionError. 我的代码如下:

while(True):
    try:
        list1 = list(map(int, input("Enter comma separated values: ").split(",")))
        assert (len(list1)==4)
        result = (((list1[0]*list1[1])+list1[2])/list1[3])
    except ValueError or ZeroDivisionError:
        print("Invalid Input!")
        continue
    else:
        break

程序应不断询问输入,直到输入有效输入。 该程序仅针对两个不正确的输入正常运行,即如果我第一次输入无效输入,它会根据需要再次要求输入。如果我再次输入无效输入,它只会打印“无效输入”但不会再次要求输入。 请分享可能是哪里的问题。

这不是您处理多个异常的方式,使用 tuple 个异常而不是 or

except (ValueError, ZeroDivisionError):

如果您想检查类型,可以使用 type()

except (ValueError, ZeroDivisionError) as e:
    if type(e) is ValueError:
        print("ValueError")
    else:
        print('ZeroDivisionError')

尝试将 ZeroDivisionErrorValueError 拆分为 2 个单独的 except 块。 (因为你的代码对我不起作用):

try:
    list1 = list(map(int, input("Enter comma separated values: ").split(",")))
    assert (len(list1)==4)
    result = (((list1[0]*list1[1])+list1[2])/list1[3])
except ValueError:
    print("Invalid Input!")
    continue
except ZeroDivisionError:
    print("Invalid Input!")