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
.
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.
И первоначальный вызов, и рекурсивный вызов имеют
finally
...