Обработка исключений внутри блока with для работы с файлами осуществляется с помощью блоков try...except. Важно, чтобы try блок охватывал все операции с файлом, которые могут выбросить исключение.  finally блок можно использовать для гарантированного выполнения кода, например, для закрытия файла (хотя with сам это делает, он может быть полезен в более сложных сценариях).
with open("file.txt", "r") as file:
    try:
        data = file.read()
        # Обработка данных, которая может вызвать исключение
        result = int(data) # Пример: если data - не число
        print(result)
    except FileNotFoundError:
        print("Файл не найден.")
    except ValueError:
        print("Невозможно преобразовать данные в число.")
    except Exception as e:
        print(f"Произошла ошибка: {e}")
    # finally:  # Блок finally не нужен, т.к. with гарантирует закрытие
    #     print("Блок finally")
  Обработка исключений при работе с файлами внутри блока with позволяет гарантировать, что программа не завершится аварийно в случае возникновения проблем, таких как отсутствие файла, недостаток прав доступа или другие ошибки ввода-вывода.  Блок with автоматически позаботится о закрытии файла, даже если произойдет исключение, что предотвращает утечки ресурсов.
Для обработки исключений внутри блока with используется конструкция try...except.  try блок содержит код, который может вызвать исключение, а except блок содержит код, который будет выполнен в случае возникновения этого исключения.
Пример:
  <code>
  try:
      with open('my_file.txt', 'r') as f:
          for line in f:
              # Обработка каждой строки
              process_line(line)
  except FileNotFoundError:
      print("Файл не найден.")
  except PermissionError:
      print("Нет прав доступа к файлу.")
  except Exception as e:
      print(f"Произошла ошибка: {e}")
  finally:
      # Этот блок будет выполнен всегда, даже если исключения не было.
      # Здесь можно выполнить какие-либо завершающие действия, но обычно это не требуется,
      # так как `with` уже гарантирует закрытие файла.
      pass
  </code>
  Пояснения:
FileNotFoundError: Обрабатывает исключение, возникающее, если файл не существует.PermissionError: Обрабатывает исключение, возникающее, если у программы нет прав доступа к файлу.Exception as e:  Это общий обработчик исключений. Он перехватит любые другие исключения, которые могут возникнуть, и присвоит объект исключения переменной e, чтобы его можно было проанализировать (например, вывести сообщение об ошибке). Важно помещать его в конце цепочки except, чтобы более специфичные исключения могли быть обработаны раньше.finally:  Блок finally выполняется всегда, независимо от того, было ли исключение и было ли оно обработано. В контексте with его использование обычно не обязательно, так как with гарантирует закрытие файла.  Однако, если внутри try блока есть другие ресурсы, требующие очистки, их можно обработать в finally.Лучшие практики:
Exception следует использовать в крайнем случае.Альтернативные подходы:
В некоторых случаях может быть полезно использовать более продвинутые библиотеки, такие как pathlib, которые предоставляют более удобные способы работы с файлами и исключениями.