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)
A saída do código acima é 1 0 0
Eu não entendi porque o finally foi executado duas vezes, embora quando ocorre o IndexError há uma chamada recursiva de fancy_divide([0, 2, 4], 2)...