finally всегда выполняется, независимо от того, было ли исключение в блоке try или нет.В конструкции try, except, finally блок finally всегда выполняется, независимо от того, было ли исключение или нет, и было ли оно обработано в блоке except или нет.
Рассмотрим несколько сценариев для пояснения:
try не произошло исключение: try блок выполняется полностью, затем выполняется блок finally.
    try произошло исключение, и есть соответствующий блок except, способный его обработать: try блок выполняется до момента исключения, затем выполняется соответствующий блок except, и после него выполняется блок finally.
    try произошло исключение, но нет соответствующего блока except, способного его обработать: try блок выполняется до момента исключения.  Блок finally выполняется, а затем исключение "всплывает" выше по стеку вызовов (если его никто не обработает, то программа завершится с ошибкой). Важно отметить, что в этом случае finally все равно выполнится до того, как исключение распространится дальше.
    except происходит исключение: Выполнится блок except до исключения, далее блок finally, а затем необработанное исключение всплывет.
    finally происходит исключение: Выполняется finally до исключения, и затем это исключение "всплывает", заменяя собой любое исключение, которое могло произойти в try или except. Это важно помнить, чтобы не потерять важную информацию об исходной ошибке.
    try, except или finally происходит оператор return, break или continue: Блок finally все равно будет выполнен перед выходом из функции, цикла или любого другого блока кода. Значение return определится до выполнения блока finally.
    Блок finally обычно используется для выполнения действий, которые должны быть выполнены в любом случае, например, для закрытия файлов, освобождения ресурсов, закрытия сетевых соединений и т.д.
Пример:
try:
    file = open("my_file.txt", "r")
    # ... работа с файлом ...
except FileNotFoundError:
    print("Файл не найден")
finally:
    if 'file' in locals() and file:
        file.close()  # Гарантированное закрытие файла
    print("Блок finally выполнен")