2015-09-18 6 views
1
def FancyDivide(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, e: 
    print e 

Когда функция называется, я получил следующий результат.Исключение, поднятое как в попытке, так и за исключением.

FancyDivide([0, 2, 4], 0) 
integer division or modulo by zero 

В коде try исключено исключение. В конце концов также есть исключение. Почему это так, что исключение в конечном итоге не было исключено в попытке.

+1

Было поймано. Затем вы напечатали его. – BrenBarn

+0

Я спрашиваю, почему исключение в блоке try не было обнаружено. Если он был пойман, то последний оператор печатает 0, а не «целочисленное деление или по модулю на ноль» – cryptomanic

+0

, это то, что я прошу. Почему 0 не печатается. – cryptomanic

ответ

4

От documentation -

А, наконец, п всегда выполняется, прежде чем покинуть заявление TRY, произошло ли исключение или нет. Если в предложении try произошло исключение и не было обработано предложением except (или оно произошло в предложении except или else), то повторно заново после выполнения предложения finally.

(выделено мной)

Как дано, исключение - Exception("0") бы только был снова поднят после завершения finally блок. Но поскольку исключение произошло в блоке finally, оно было поднято вместо Exception("0").

 Смежные вопросы

  • Нет связанных вопросов^_^