2017-02-15 81 views
3

有没有更好的方法来写这些例外,而不是把一个例外放入另一个例外?在这种情况下,它可以正常工作,但如果我需要添加更多的异常,事情可能会变得非常混乱。如何为一个“尝试”场景编写多个例外?

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) 

回答

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) 
+0

其他在尝试/除外?如果是的话,很高兴知道:) 如果没有,那么你可以继续在每个除外,它也将解决这个问题(如其他) –

+1

是的,一个'else'可以跟随'except'。这有点不常见,但在语法上有效。 [“try ... except语句有一个可选的else子句,当存在时,它必须遵循除了子句之外的所有子句。对于try子句不引发异常时必须执行的代码非常有用。”](https: //docs.python.org/3/tutorial/errors.html#handling-exceptions) – Kevin

1

可以提供下一个下每个处理程序,如果你不介意的话写多个except子句,或者如果你需要每个案件的具体处理。

如果您可以提供一个错误信息,要修剪下来尽可能多的,你总是可以提供一个元组except赶上许多类:

except (ValueError, ZeroDivisionError) as e: 

如果一个异常是一个实例在元组中指定的其中一个类被引发,它会被捕获并被分配到e(如果需要的话)。

0

如果你想除了2案例1,你可以做,因为吉姆建议。 我个人比较喜欢这样的解决方案:

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

这是无效的Python语法。 –

2

另一个变化是使用continue重新启动循环在特殊的情况。这将排除需要try-else条款:

这种方法的缺点是它比凯文的答案更详细。其优点是每个try只处理一种可能出错的东西,所以它可以让你的代码更易于思考。