finally вызывает исключение, оно заменит любое исключение, которое могло быть выброшено в блоке try или except. Исключение, возникшее в try/except, будет потеряно. Важно обрабатывать исключения в finally блоке, чтобы избежать такой ситуации.
Если блок finally вызывает исключение после того, как в блоке try произошло исключение, то исключение, возникшее в блоке finally, заменит исходное исключение, возникшее в блоке try.
Другими словами, исключение из блока try будет потеряно, и только исключение из блока finally будет распространено дальше.  Это важно понимать, поскольку это может затруднить отладку, так как вы не увидите исходную причину проблемы.
Пример:
try:
    raise ValueError("Ошибка в блоке try")
finally:
    raise TypeError("Ошибка в блоке finally")
  В этом примере будет выброшено исключение TypeError, а ValueError будет проигнорировано.  Таким образом, важно избегать ситуаций, когда блок finally может выбросить исключение, особенно если блок finally предназначен для очистки ресурсов.
Рекомендации:
finally.finally.finally, чтобы предотвратить замену исходного исключения. Например, используя внутренний блок try...except внутри finally.Пример обработки исключения внутри finally:
try:
    raise ValueError("Ошибка в блоке try")
finally:
    try:
        # Код, который может вызвать исключение
        raise TypeError("Ошибка в блоке finally")
    except TypeError as e:
        print(f"Исключение в finally: {e}")
        # Можно выполнить логирование или другие действия
        pass  # Важно не поднимать исключение повторно, если не уверены!