首页 > 解决方案 > 尝试在while循环中阻塞

问题描述

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

((num1*num2)+num3)/num4

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

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

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

标签: pythontry-catch

解决方案


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

except (ValueError, ZeroDivisionError):

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

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

推荐阅读