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