2017-02-15 43 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只處理一種可能出錯的東西,所以它可以讓你的代碼更易於思考。

相關問題