Почему это выводит 1, 0, 0 вместо 1, 0?

#python #python-3.x

#python #python-3.x

Вопрос:

 def fancy_divide(numbers, index):
    try:
        denom = numbers[index]
        for i in range(len(numbers)):
            numbers[i] /= denom
    except IndexError:
        fancy_divide(numbers, len(numbers) - 1)
    except ZeroDivisionError:
        print("-2")
    else:
        print("1")
    finally:
        print("0")

fancy_divide([0, 2, 4], 4)
  

Я ожидаю, что результат будет 1, 0 но фактический результат будет 1, 0, 0 .

Комментарии:

1. Как первоначальный вызов, так и рекурсивный вызов имеют finally

Ответ №1:

def вызывается дважды, поэтому finally вызывается дважды, а результат равен 1 0 0 . итак, если вы хотите, чтобы ваш результат был равен 1 0, вы можете написать код, как показано ниже,

     def fancy_divide(numbers, index):
    try:
        denom = numbers[index]
        for i in range(len(numbers)):
            numbers[i] /= denom
    except IndexError:
        try:
            fancy_divide(numbers, len(numbers) - 1)
        finally:
            print("0")
    except ZeroDivisionError:
        print("-2")
    else:
        print("1")


fancy_divide([0, 2, 4], 9)
  

но я думаю, что запись ниже будет правильным способом сделать это,

 def fancy_divide(numbers, index):
    try:
        denom = numbers[index]
        for i in range(len(numbers)):
            numbers[i] /= denom
    except IndexError:
        try:
            fancy_divide(numbers, len(numbers) - 1)
        finally:
            print("0")
    except ZeroDivisionError:
        print("-2")
    else:
        print("1")
    finally:
        print("0")

fancy_divide([0, 2, 4], 9)
  

но здесь вывод будет 1 0 0 0.