2017-03-10 10 views
-2

MITxからの例は2つあります:6.00.1x。最初のものである:Pythonで例外を使用する方法(例)

def fancy_divide(list_of_numbers, index): 
    try: 
     try: 
      raise Exception("0") 
     finally: 
      denom = list_of_numbers[index] 
      for i in range(len(list_of_numbers)): 
       list_of_numbers[i] /= denom 
    except Exception as ex: 
     print(ex) 

Iはfancy_divide([0、2、4]、0)、それは示して呼び出す場合:分割をゼロによる。

第二の例である:私はfancy_divide呼び出すとき

def fancy_divide(list_of_numbers, index): 
    try: 
     try: 
      denom = list_of_numbers[index] 
      for i in range(len(list_of_numbers)): 
       list_of_numbers[i] /= denom 
     finally: 
      raise Exception("0") 
    except Exception as ex: 
     print(ex) 

([0、2、4]、0)、それは示しています0

なぜそれらが異なった結果を持っていますか?

+0

記述するものは何もありません。 「試して」「最後に」何を理解しましたか? –

答えて

1
def fancy_divide(list_of_numbers, index): 
    ''' As soon as the function is called, interpreter executes the 2nd try block raising Exception('0') 
    Since an exception is raised, finally block would get excuted. 
    Since we passed denom value being zero, Interpreter throws a divide by zero error''' 
    try: 
     try: 
      raise Exception("0") # exception is raised 
     finally: 
      denom = list_of_numbers[index] # finally executed because of exception 
      for i in range(len(list_of_numbers)): 
       list_of_numbers[i] /= denom # Divide by zero Error thrown by interpreter 
    except Exception as ex: 
     print(ex) 

def fancy_divide(list_of_numbers, index): 
    '''You don't require explanation if you understood previous one''' 
    try: 
     try: 
      denom = list_of_numbers[index] 
      for i in range(len(list_of_numbers)): 
       list_of_numbers[i] /= denom # Divide by zero Exception is thrown by interpreter 
     finally: 
      raise Exception("0") # Raises Exception("0") 
    except Exception as ex: 
     print(ex) # prints the same 
+0

なぜ最初の例外が例外として実行されなかったのですか? – jiangniao

+0

実行された例外を除いて例外は除外されました。その例外は印刷されました。 – vardin

+0

大丈夫、私はそれを得た。ありがとうございました – jiangniao

関連する問題