有什么方法可以为每个输入添加ValueError?

时间:2019-11-06 16:56:13

标签: python python-3.x valueerror except

所以我试图编写一个代码,在其中输入矩形的宽度和高度,它给出了面积和周长,现在显然输入只能是数字,所以我希望能够要求另一个输入当前输入不是数字。 (告诉用户仅输入数字)。问题在于,如果第一个输入(宽度)是数字,而只有第二个输入(高度)不是数字,我不希望程序要求用户输入宽度再次,我只希望用户再次输入高度而不是宽度,因为宽度已经以数字形式输入了。我该怎么办?

while True:
try:
    a = float(input("Please enter width :"))
    b = float(input("Please enter height :"))

except ValueError:
    print("PLease only enter numbers ")
    continue

area = float(a*b)
perimeter = float((a+b)*2)

print('The area of the rectangle is {} and the perimeter of the rectangle is {} '.format(area, perimeter))

2 个答案:

答案 0 :(得分:2)

基本答案是将对float的每个调用包装在单独的try中并分别处理。从字面上看,写出两个try会很麻烦而且很笨重。

相反,我会将try移到其自己的函数中,然后两次调用该函数:

# Let this function handle the bad-input looping 
def ask_for_float(message):
    while True:
        try:
            return float(input(message)) 

        except ValueError:
            print("Please only enter numbers ")

a = ask_for_float("Please enter width :")
b = ask_for_float("Please enter height :")

答案 1 :(得分:0)

在单独的try块中输入您的输入,然后可以分别捕获错误。 例如,

try:
a = float(input("Please enter width :"))

except ValueError:
    print("PLease only enter numbers ")

try:
    b = float(input("Please enter height :"))

except ValueError:
    print("PLease only enter numbers ")
    continue

area = float(a*b)
perimeter = float((a+b)*2)