Ошибки и отладка

Обработка ошибок ввода и отсутствия файла

Содержание курса

Перехват FileNotFoundError при чтении файла

Теперь посмотрим, как это выглядит на практике. Задача простая: открыть файл на чтение, но сделать это так, чтобы программа не падала, если файла нет.

Конструкция with open(...) as f уже знакома — она сама закрывает файл по выходу из блока. Здесь она остаётся без изменений, только оборачивается в try:

try:
    with open('data.txt', 'r', encoding='utf-8') as f:
        content = f.read()
    print('Файл прочитан, символов:', len(content))
except FileNotFoundError:
    print('Ошибка: файл data.txt не найден')

Что здесь происходит: open('data.txt', 'r', ...) — это та самая «опасная» строка. Если data.txt отсутствует на диске, Python не доберётся до f.read() — исключение возникнет уже при вызове open(). Блок except FileNotFoundError: ловит именно этот момент и выводит понятное сообщение вместо трейсбэка.

Обратите внимание: print с длиной контента стоит внутри try, после with-блока. Это правильно — он выполнится только если файл открылся успешно. Если бы он стоял после всего try-except, он выполнялся бы даже при ошибке, что было бы логически некорректно.

Ещё один момент: except FileNotFoundError: не перехватывает другие ошибки файловой системы — например, PermissionError (когда файл есть, но нет прав на чтение). Это нормально: мы перехватываем ровно ту ситуацию, которую ожидаем и умеем обработать. Всё остальное пусть всплывает как обычно.