如何为一个"尝试"编写多个例外。场景?

时间:2017-02-15 19:11:44

标签: python python-3.x

是否有更好的方法来编写这些异常而不是将一个异常放入另一个异常?在这种情况下,它工作正常,但如果我需要添加更多的异常,事情可能会变得非常混乱。

print('I will divide two numbers for you: ')
while True:
    first_number= input('Enter first number: ')
    second_number= input('Enter second number: ')

    try:
        int(first_number)
        int(second_number)
    except ValueError:
        print('Please put it in numbers')
    else:
        try:
            answer = int(first_number)/int(second_number)
        except ZeroDivisionError:
            print("Can't divide by zero")
        else:
            print(answer)

4 个答案:

答案 0 :(得分:8)

一个try可以有多个except s。

print('I will divide two numbers for you: ')
while True:
    first_number= input('Enter first number: ')
    second_number= input('Enter second number: ')

    try:
        answer = int(first_number) / int(second_number)
    except ValueError:
        print('Please put it in numbers')
    except ZeroDivisionError:
        print("Can't divide by zero")
    else:
        print(answer)

答案 1 :(得分:2)

另一种变体是在特殊情况下使用continue重新启动循环。这将排除对try-else条款的需求:

print('I will divide two numbers for you: ')

while True:
    first_number = input('Enter first number: ')
    second_number = input('Enter second number: ')

    try:
        first_number = int(first_number)
        second_number = int(second_number)
    except ValueError:
        print('Please put it in numbers')
        continue

    try:
        answer = first_number / second_number
    except ZeroDivisionError:
        print("Can't divide by zero")
        continue

    print(answer)

这种方法的缺点是它比凯文的答案更冗长。优点是每个try只处理一种可能出错的事情,因此它可以让您的代码更容易思考。

答案 2 :(得分:1)

如果您不介意编写多个except子句,或者如果您需要对每个案例进行特定处理,则可以在下一个下面提供每个处理程序。

如果您可以提供单个错误消息并希望尽可能减少,则可以始终为except提供一个元组以捕获许多类:

except (ValueError, ZeroDivisionError) as e:

如果引发了作为元组中指定的某个类的实例的异常,则会被捕获并被分配到e(如果需要)。

答案 3 :(得分:0)

如果您想将2个案例除外,您可以像Jim建议的那样做。 我个人更喜欢这个解决方案:

try:
    a = int(string1)
    b = int(string2)
    ans = a/b
except ValueError:
    print("not numbers")
except ZeroDivisionError:
    print("zero division")