#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.